Skip to content

Latest commit

 

History

History
869 lines (666 loc) · 13.4 KB

File metadata and controls

869 lines (666 loc) · 13.4 KB

Protocol Buffer Data Structures

Note

This page is automatically generated from the Protocol Buffer definition files. Last updated: Generated by generate_protobuf_docs.py

Overview

ResInsight uses Protocol Buffers (protobuf) for efficient data serialization and communication between Python and the ResInsight application via gRPC. The protobuf definitions define the structure of data that can be exchanged with ResInsight.

The generated Python classes from these protobuf files are used as return types and parameters in many rips API methods.

Source Files

The Protocol Buffer definition files (.proto) are automatically downloaded from the ResInsight repository and stored in the docs/proto directory.

The generated Python files are located in docs/rips/generated/ and include:

Key Data Structures

These are the most commonly used Protocol Buffer structures in the ResInsight Python API.

SimulatorTableData

Source: SimulatorTables.proto

Repeated Fields:

Field Type Description
compdat list[SimulatorCompdatEntry]  
welspecs list[SimulatorWelspecsEntry]  
welsegs list[SimulatorWelsegsEntry]  
compsegs list[SimulatorCompsegsEntry]  
wsegvalv list[SimulatorWsegvalvEntry]  
wsegaicd list[SimulatorWsegaicdEntry]  

SimulatorCompdatEntry

Source: SimulatorTables.proto

Attributes:

Field Type Description
well_name str  
grid_i int  
grid_j int  
upper_k int  
lower_k int  
open_shut_flag str  

Optional Attributes:

Field Type Description
saturation float | None  
transmissibility float | None  
diameter float | None  
kh float | None  
skin_factor float | None  
d_factor float | None  
direction str | None  
start_md float | None  
end_md float | None  
comment str | None  

SimulatorWelspecsEntry

Source: SimulatorTables.proto

Attributes:

Field Type Description
well_name str  
group_name str  
grid_i int  
grid_j int  
phase str  

Optional Attributes:

Field Type Description
bhp_depth float | None  
drainage_radius float | None  
inflow_equation str | None  
auto_shut_in str | None  
cross_flow str | None  
pvt_num int | None  
hydrostatic_density_calc str | None  
fip_region int | None  

SimulatorTableRequest

Source: SimulatorTables.proto

Attributes:

Field Type Description
wellpath_name str  
case_id int  

Vec3d

Source: Definitions.proto

Attributes:

Field Type Description
x float  
y float  
z float  

Vec3i

Source: Definitions.proto

Attributes:

Field Type Description
i int  
j int  
k int  

CellCenters

Source: Definitions.proto

CellCorners

Source: Definitions.proto

Attributes:

Field Type Description
c0 Vec3d  
c1 Vec3d  
c2 Vec3d  
c3 Vec3d  
c4 Vec3d  
c5 Vec3d  
c6 Vec3d  
c7 Vec3d  

Complete Structure Reference

Definitions.proto

Empty

Source: Definitions.proto

ClientToServerStreamReply

Source: Definitions.proto

CellCornersArray

Source: Definitions.proto

SimulatorTables.proto

SimulatorTableUnifiedRequest

Source: SimulatorTables.proto

Attributes:

Field Type Description
case_id int  

Repeated Fields:

Field Type Description
wellpath_names list[str]  

SimulatorWelsegsHeaderEntry

Source: SimulatorTables.proto

Attributes:

Field Type Description
well_name str  
top_depth float  
top_length float  
info_type str  

Optional Attributes:

Field Type Description
wellbore_volume float | None  
pressure_omponents str | None  
flow_model str | None  

SimulatorWelsegsRowEntry

Source: SimulatorTables.proto

Attributes:

Field Type Description
segment_1 int  
segment_2 int  
branch int  
join_segment int  
length float  
depth float  

Optional Attributes:

Field Type Description
diameter float | None  
roughness float | None  
description str | None  

SimulatorWelsegsEntry

Source: SimulatorTables.proto

Attributes:

Field Type Description
header SimulatorWelsegsHeaderEntry  

Repeated Fields:

Field Type Description
row list[SimulatorWelsegsRowEntry]  

SimulatorCompsegsEntry

Source: SimulatorTables.proto

Attributes:

Field Type Description
i int  
j int  
k int  
branch int  
distance_start float  
distance_end float  

Optional Attributes:

Field Type Description
grid_name str | None  

SimulatorWsegvalvEntry

Source: SimulatorTables.proto

Attributes:

Field Type Description
well_name str  
segment_number int  
cv float  
area float  

Optional Attributes:

Field Type Description
extra_length float | None  
pipe_d float | None  
roughness float | None  
pipe_a float | None  
status str | None  
max_a float | None  

SimulatorWsegaicdEntry

Source: SimulatorTables.proto

Attributes:

Field Type Description
well_name str  
segment_1 int  
segment_2 int  
strength float  
max_abs_rate float  
flow_rate_exponent float  
visc_exponent float  

Optional Attributes:

Field Type Description
length float | None  
density_cali float | None  
viscosity_cali float | None  
critical_value float | None  
width_trans float | None  
max_visc_ratio float | None  
method_scaling_factor int | None  
status str | None  
oil_flow_fraction float | None  
water_flow_fraction float | None  
gas_flow_fraction float | None  
oil_visc_fraction float | None  
water_visc_fraction float | None  
gas_visc_fraction float | None  
description str | None  

WellPath Service

Usage Examples

Working with SimulatorTableData

The :meth:`rips.WellPath.completion_data` method returns a SimulatorTableData object containing well completion information:

import rips

# Connect to ResInsight
resinsight = rips.Instance.find()
project = resinsight.project

# Get a case
case = project.cases()[0]

# Get well path
well_path = project.well_paths()[0]

# Get completion data
completion_data = well_path.completion_data(case.id)

# Access COMPDAT entries
for compdat_entry in completion_data.compdat:
    print(f"Well: {compdat_entry.well_name}")
    print(f"  Grid location: i={compdat_entry.grid_i}, j={compdat_entry.grid_j}")
    print(f"  K layers: {compdat_entry.upper_k} to {compdat_entry.lower_k}")
    print(f"  Status: {compdat_entry.open_shut_flag}")
    if compdat_entry.HasField('transmissibility'):
        print(f"  Transmissibility: {compdat_entry.transmissibility}")
    if compdat_entry.HasField('diameter'):
        print(f"  Diameter: {compdat_entry.diameter}")

# Access WELSPECS entries
for welspecs_entry in completion_data.welspecs:
    print(f"Well: {welspecs_entry.well_name}")
    print(f"  Group: {welspecs_entry.group_name}")
    print(f"  Phase: {welspecs_entry.phase}")
    print(f"  Grid location: i={welspecs_entry.grid_i}, j={welspecs_entry.grid_j}")
    if welspecs_entry.HasField('bhp_depth'):
        print(f"  BHP Depth: {welspecs_entry.bhp_depth}")

Working with Optional Fields

Many protobuf messages contain optional fields. Use the HasField() method to check if an optional field is set:

# Check if optional field is set before accessing
if entry.HasField('saturation'):
    saturation_value = entry.saturation
else:
    saturation_value = None

# Or use getattr with a default value
saturation = getattr(entry, 'saturation', None)

Working with Vec3d and Vec3i

Many protobuf messages use Vec3d (3D double vector) or Vec3i (3D integer vector) for coordinates:

# Vec3d example (cell centers, coordinates)
cell_centers = grid.cell_centers()
for center in cell_centers.centers:
    print(f"Center: x={center.x}, y={center.y}, z={center.z}")

# Vec3i example (grid indices)
grid_dims = grid.dimensions()
print(f"Grid dimensions: i={grid_dims.i}, j={grid_dims.j}, k={grid_dims.k}")

See Also

External Resources