mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
* Move case loading commands from Commands to project and case * Major refactor * Fix problems with Python examples * Add ability to export snapshot from just one view + fixup * Case comments and black * Make all modules pass pylint test
This commit is contained in:
170
ApplicationCode/GrpcInterface/Python/rips/view.py
Normal file
170
ApplicationCode/GrpcInterface/Python/rips/view.py
Normal file
@@ -0,0 +1,170 @@
|
||||
"""
|
||||
ResInsight 3d view module
|
||||
"""
|
||||
import rips.generated.Commands_pb2 as Cmd
|
||||
|
||||
import rips.case # Circular import of Case, which already imports View. Use full name.
|
||||
from rips.pdmobject import PdmObject
|
||||
|
||||
|
||||
class View(PdmObject):
|
||||
"""ResInsight view class
|
||||
|
||||
Attributes:
|
||||
id(int): View Id corresponding to the View Id in ResInsight project.
|
||||
|
||||
"""
|
||||
def __init__(self, pdm_object):
|
||||
self.view_id = pdm_object.get_value("ViewId")
|
||||
|
||||
PdmObject.__init__(self, pdm_object._pb2_object, pdm_object._channel)
|
||||
|
||||
def show_grid_box(self):
|
||||
"""Check if the grid box is meant to be shown in the view"""
|
||||
return self.get_value("ShowGridBox")
|
||||
|
||||
def set_show_grid_box(self, value):
|
||||
"""Set if the grid box is meant to be shown in the view"""
|
||||
self.set_value("ShowGridBox", value)
|
||||
|
||||
def background_color(self):
|
||||
"""Get the current background color in the view"""
|
||||
return self.get_value("ViewBackgroundColor")
|
||||
|
||||
def set_background_color(self, bgcolor):
|
||||
"""Set the background color in the view"""
|
||||
self.set_value("ViewBackgroundColor", bgcolor)
|
||||
|
||||
def set_cell_result(self):
|
||||
"""Retrieve the current cell results"""
|
||||
return self.children("GridCellResult")[0]
|
||||
|
||||
def apply_cell_result(self, result_type, result_variable):
|
||||
"""Apply a regular cell result
|
||||
|
||||
Arguments:
|
||||
result_type (str): String representing the result category. The valid values are
|
||||
- DYNAMIC_NATIVE
|
||||
- STATIC_NATIVE
|
||||
- SOURSIMRL
|
||||
- GENERATED
|
||||
- INPUT_PROPERTY
|
||||
- FORMATION_NAMES
|
||||
- FLOW_DIAGNOSTICS
|
||||
- INJECTION_FLOODING
|
||||
result_variable (str): String representing the result variable.
|
||||
"""
|
||||
cell_result = self.set_cell_result()
|
||||
cell_result.set_value("ResultType", result_type)
|
||||
cell_result.set_value("ResultVariable", result_variable)
|
||||
cell_result.update()
|
||||
|
||||
def apply_flow_diagnostics_cell_result(
|
||||
self,
|
||||
result_variable='TOF',
|
||||
selection_mode='FLOW_TR_BY_SELECTION',
|
||||
injectors=None,
|
||||
producers=None):
|
||||
"""Apply a flow diagnostics cell result
|
||||
|
||||
Arguments:
|
||||
result_variable (str): String representing the result value
|
||||
The valid values are 'TOF', 'Fraction', 'MaxFractionTracer' and 'Communication'.
|
||||
selection_mode (str): String specifying which tracers to select.
|
||||
The valid values are
|
||||
- FLOW_TR_INJ_AND_PROD (all injector and producer tracers),
|
||||
- FLOW_TR_PRODUCERS (all producers)
|
||||
- FLOW_TR_INJECTORS (all injectors),
|
||||
- FLOW_TR_BY_SELECTION (specify individual tracers in the
|
||||
injectors and producers variables)
|
||||
injectors (list): List of injector names (strings) to select.
|
||||
Requires selection_mode to be 'FLOW_TR_BY_SELECTION'.
|
||||
producers (list): List of producer tracers (strings) to select.
|
||||
Requires selection_mode to be 'FLOW_TR_BY_SELECTION'.
|
||||
"""
|
||||
if injectors is None:
|
||||
injectors = []
|
||||
if producers is None:
|
||||
producers = []
|
||||
cell_result = self.set_cell_result()
|
||||
cell_result.set_value("ResultType", "FLOW_DIAGNOSTICS")
|
||||
cell_result.set_value("ResultVariable", result_variable)
|
||||
cell_result.set_value("FlowTracerSelectionMode", selection_mode)
|
||||
if selection_mode == 'FLOW_TR_BY_SELECTION':
|
||||
cell_result.set_value("SelectedInjectorTracers", injectors)
|
||||
cell_result.set_value("SelectedProducerTracers", producers)
|
||||
cell_result.update()
|
||||
|
||||
def case(self):
|
||||
"""Get the case the view belongs to"""
|
||||
pdm_case = self.ancestor("EclipseCase")
|
||||
if pdm_case is None:
|
||||
pdm_case = self.ancestor("ResInsightGeoMechCase")
|
||||
if pdm_case is None:
|
||||
return None
|
||||
return rips.case.Case(self._channel, pdm_case.get_value("CaseId"))
|
||||
|
||||
def clone(self):
|
||||
"""Clone the current view"""
|
||||
view_id = self._execute_command(cloneView=Cmd.CloneViewRequest(
|
||||
viewId=self.view_id)).createViewResult.viewId
|
||||
return self.case().view(view_id)
|
||||
|
||||
def set_time_step(self, time_step):
|
||||
case_id = self.case().case_id
|
||||
return self._execute_command(setTimeStep=Cmd.SetTimeStepParams(
|
||||
caseId=case_id, viewId=self.view_id, timeStep=time_step))
|
||||
|
||||
def export_sim_well_fracture_completions(self, time_step,
|
||||
simulation_well_names, file_split,
|
||||
compdat_export):
|
||||
if isinstance(simulation_well_names, str):
|
||||
simulation_well_names = [simulation_well_names]
|
||||
|
||||
case_id = self.case().case_id
|
||||
return self._execute_command(
|
||||
exportSimWellFractureCompletions=Cmd.ExportSimWellPathFracRequest(
|
||||
caseId=case_id,
|
||||
viewId=self.view_id,
|
||||
timeStep=time_step,
|
||||
simulationWellNames=simulation_well_names,
|
||||
fileSplit=file_split,
|
||||
compdatExport=compdat_export))
|
||||
|
||||
def export_visible_cells(self,
|
||||
export_keyword='FLUXNUM',
|
||||
visible_active_cells_value=1,
|
||||
hidden_active_cells_value=0,
|
||||
inactive_cells_value=0):
|
||||
case_id = self.case().case_id
|
||||
return self._execute_command(
|
||||
exportVisibleCells=Cmd.ExportVisibleCellsRequest(
|
||||
caseId=case_id,
|
||||
viewId=self.view_id,
|
||||
exportKeyword=export_keyword,
|
||||
visibleActiveCellsValue=visible_active_cells_value,
|
||||
hiddenActiveCellsValue=hidden_active_cells_value,
|
||||
inactiveCellsValue=inactive_cells_value))
|
||||
|
||||
def export_property(self, undefined_value=0.0):
|
||||
""" Export the current Eclipse property from the view
|
||||
|
||||
Arguments:
|
||||
undefined_value (double): Value to use for undefined values. Defaults to 0.0
|
||||
"""
|
||||
case_id = self.case().case_id
|
||||
return self._execute_command(
|
||||
exportPropertyInViews=Cmd.ExportPropertyInViewsRequest(
|
||||
caseId=case_id,
|
||||
viewIds=[self.view_id],
|
||||
undefinedValue=undefined_value))
|
||||
|
||||
def export_snapshot(self, prefix=''):
|
||||
""" Export snapshot for the current view
|
||||
Arguments:
|
||||
prefix (str): Exported file name prefix
|
||||
"""
|
||||
case_id = self.case().case_id
|
||||
return self._execute_command(
|
||||
exportSnapshots=Cmd.ExportSnapshotsRequest(
|
||||
type='VIEWS', prefix=prefix, caseId=case_id, viewId=self.view_id))
|
||||
Reference in New Issue
Block a user