resqpy.well.BlockedWell
- class resqpy.well.BlockedWell(parent_model, uuid=None, grid=None, trajectory=None, wellspec_file=None, cellio_file=None, column_ji0=None, well_name=None, check_grid_name=False, use_face_centres=False, represented_interp=None, originator=None, extra_metadata=None, add_wellspec_properties=False, usa_date_format=False, lazy=False)
Bases:
BaseResqpyClass for RESQML Blocked Wellbore Representation (Wells), ie cells visited by wellbore.
Notes
RESQML documentation: The information that allows you to locate, on one or several grids (existing or planned), the intersection of volume (cells) and surface (faces) elements with a wellbore trajectory (existing or planned)
Public Data Attributes:
resqml_typeAlias for title
Returns blocked well property collection of all well log properties.
Inherited from
BaseResqpyDefinition of which RESQML object the class represents.
Standard part name corresponding to self.uuid.
XML node corresponding to self.uuid.
Citation block title equivalent to self.title.
Commonly Used Methods:
__init__(parent_model[, uuid, grid, ...])Creates a new blocked well object and optionally loads it from xml, or trajectory, or Nexus wellspec file.
Returns a list of the uuids of the grids referenced by the blocked well object.
Returns a numpy int array of shape (N, 3) of cells visited by well, for a single grid situation.
Returns a numpy int array of shape (N, 3) of cells visited by well, and a list of grid objects of length N.
cell_indices_for_grid_uuid(grid_uuid)Returns a numpy int array of shape (N, 3) of cells visited by well in specified grid.
dataframe([i_col, j_col, k_col, one_based, ...])Returns a pandas data frame containing Nexus WELLSPEC style data.
create_xml([ext_uuid, ...])Create a blocked wellbore representation node from this BlockedWell object, optionally add as part.
write_hdf5([file_name, mode, ...])Create or append to an hdf5 file, writing datasets for the measured depths, grid, cell & face indices.
Methods:
extract_property_collection([refresh])Returns a property collection for the blocked well.
Returns a list of index values linking the grid_indices to cell_indices.
Returns a list of grid indices excluding the -1 elements (unblocked intervals).
Returns the number of grids referenced by the blocked well object.
Asserts that exactly one grid is being referenced and returns a grid object for that grid.
interval_for_cell(cell_index)Returns the interval index for a given cell index (identical if there are no unblocked intervals).
entry_and_exit_mds(cell_index)Returns entry and exit measured depths for a blocked cell.
box([grid_uuid])Returns the KJI box containing the cells visited by the well, for single grid if grid_uuid is None.
Returns numpy int array of shape (N, 2, 2) being pairs of face (axis, polarity) pairs, to go with cell_kji0_array().
compute_from_trajectory(trajectory, grid[, ...])Populate this blocked wellbore object based on intersection of trajectory with cells of grid.
set_for_column(well_name, grid, col_ji0[, ...])Populates empty blocked well for a 'vertical' well in given column; creates simulation trajectory and md datum.
derive_from_wellspec(wellspec_file, ...[, ...])Populates empty blocked well from Nexus WELLSPEC data; creates simulation trajectory and md datum.
derive_from_cell_list(cell_kji0_list, ...[, ...])Populate empty blocked well from numpy int array of shape (N, 3) being list of cells.
derive_from_dataframe(df, well_name, grid[, ...])Populate empty blocked well from WELLSPEC-like dataframe; first columns must be IW, JW, L (i, j, k).
import_from_rms_cellio(cellio_file, ...[, ...])Populates empty blocked well from RMS cell I/O data; creates simulation trajectory and md datum.
wb_cell_for_md(md)Return blocked well cell index and fractional distance into cell md interval, for given md.
Returns wellbore frame contributions to each cell in this blocked well.
Add properties to this blocked well by derivation from wellbore frame intervals properties.
add_df_properties(df, columns[, length_uom, ...])Creates a property part for each column in the dataframe, based on the dataframe values.
static_kh([ntg_uuid, perm_i_uuid, ...])Returns the total static K.H (permeability x height).
write_wellspec(wellspec_file[, well_name, ...])Writes Nexus WELLSPEC keyword to an ascii file.
kji0_marker([active_only])Convenience method returning (k0, j0, i0), grid_uuid of first blocked interval.
xyz_marker([active_only])Convenience method returning (x, y, z), crs_uuid of perforation in first blocked interval.
Instantiate new empty WellboreFeature and WellboreInterpretation objects.
create_md_datum_and_trajectory(grid, ...[, ...])Creates an Md Datum object and a (simulation) Trajectory object for this blocked well.
add_grid_property_to_blocked_well(uuid_list)Add properties to blocked wells from a list of uuids for properties on the supporting grid.
Inherited from
BaseResqpy__init__(model[, uuid, title, originator, ...])Load an existing resqml object, or create new.
Look for an equivalent existing RESQML object and modify the uuid of this object if found.
create_xml([title, originator, ...])Write citation block to XML.
append_extra_metadata(meta_dict)Append a given dictionary of metadata to the existing metadata.
__eq__(other)Implements equals operator; uses is_equivalent() otherwise compares class type and uuid.
__ne__(other)Implements not equal operator.
__repr__()String representation.
- __init__(parent_model, uuid=None, grid=None, trajectory=None, wellspec_file=None, cellio_file=None, column_ji0=None, well_name=None, check_grid_name=False, use_face_centres=False, represented_interp=None, originator=None, extra_metadata=None, add_wellspec_properties=False, usa_date_format=False, lazy=False)[source]
Creates a new blocked well object and optionally loads it from xml, or trajectory, or Nexus wellspec file.
- Parameters:
parent_model (
model.Model object) – the model which the new blocked well belongs touuid (optional) – if present, the uuid of an existing blocked wellbore, in which case remaining arguments are ignored
grid (optional,
grid.Grid object) – required if intialising from a trajectory or wellspec file; not used if uuid is not Nonetrajectory (optional,
Trajectory object) – the trajectory of the well, to be intersected with the grid; not used if uuid is not Nonewellspec_file (optional,
string) – filename of an ascii file holding the Nexus wellspec data; ignored if uuid is not None or trajectory is not Nonecellio_file (optional,
string) – filename of an ascii file holding the RMS exported blocked well data; ignored if uuid is not None or trajectory is not None or wellspec_file is not Nonecolumn_ji0 (optional,
pairofints) – column indices (j0, i0) for a ‘vertical’ well; ignored if uuid is not None or trajectory is not None or wellspec_file is not None or cellio_file is not Nonewell_name (
string) – the well name as given in the wellspec or cellio file; required if loading from one of those files; or the name to be used as citation title for a column wellcheck_grid_name (
boolean, defaultFalse) – if True, the GRID column of the wellspec data will be checked for a match with the citation title of the grid object; perforations for other grids will be skipped; if False, all wellspec data is assumed to relate to the grid; only relevant when loading from wellspecuse_face_centres (
boolean, defaultFalse) – if True, cell face centre points are used for the entry and exit points when constructing the simulation trajectory; if False and ANGLA & ANGLV data are available then entry and exit points are constructed based on a straight line at those angles passing through the centre of the cell; only relevant when loading from wellspecrepresented_interp (
wellbore interpretation object, optional) – if present, is noted as the wellbore interpretation object which this frame relates to; ignored if uuid is not Noneoriginator (
str, optional) – the name of the person creating the blocked well, defaults to login id; ignored if uuid is not Noneextra_metadata (
dict, optional) – string key, value pairs to add as extra metadata for the blocked well; ignored if uuid is not Noneadd_wellspec_properties (
booleanorlistofstr, defaultFalse) – if not False, and initialising from a wellspec file, the blocked well has its hdf5 data written and xml created and properties are fully created; if a list is provided the elements must be numerical wellspec column names; if True, all numerical columns other than the cell indices are added as propertiesusa_date_format (
boolean, optional) – specifies whether MM/DD/YYYY (True) or DD/MM/YYYY (False) is used in wellspec filelazy (
boolean, defaultFalse) – if True, when initialising from a trajectory, initial penetration must be through a top K face and blocking will cease as soon as the trajectory first leaves the gridded volume; if False, initial entry may be through any external face or a fault face and re-entry will be handled; ignored if not initialising from a trajectory
- Returns:
the newly created blocked well object
Notes
if starting from a wellspec file or column indices, a ‘simulation’ trajectory and md datum objects are constructed to go with the blocked well; column wells might not be truly vertical - the trajectory will consist of linear segments joining the centres of the k faces in the column; optional RESQML attributes are not handled by this code (WITSML log reference, interval stratigraphic units, cell fluid phase units); multiple grids are currently only supported when loading an existing blocked well from xml; mysterious RESQML WellboreFrameIndexableElements is not used in any other RESQML classes and is therefore not used here; measured depth data must be in same crs as those for the related trajectory
- add_df_properties(df, columns, length_uom=None, time_index=None, time_series_uuid=None, realization=None)[source]
Creates a property part for each column in the dataframe, based on the dataframe values.
- Parameters:
df (
pd.DataFrame) – dataframe containing the columns that will be converted to propertiescolumns (
List[str]) – list of the column names that will be converted to propertieslength_uom (
str, optional) – the length unit of measuretime_index (
int, optional) – if adding a timestamp to the property, this is the timestamp index of the TimeSeries timestamps attributetime_series_uuid (
uuid.UUID, optional) – if adding a timestamp to the property, this is the uuid of the TimeSeries objectrealization (
int, optional) – if present, is used as the realization number for all the properties
- Returns:
None
Notes
the column name is used as the property citation title; the blocked well must already exist as a part in the model; this method currently only handles single grid situations; dataframe rows must be in the same order as the cells in the blocked well
- add_grid_property_to_blocked_well(uuid_list)[source]
Add properties to blocked wells from a list of uuids for properties on the supporting grid.
- add_properties_from_wellbore_frame(frame_uuid=None, property_kinds_list=None, realization=None, set_length=None, set_perforation_fraction=None, set_frame_interval=False)[source]
Add properties to this blocked well by derivation from wellbore frame intervals properties.
- Parameters:
frame_uuid (
uuid, optional) – the uuid of the wellbore frame to source properties from; if None, a solitary wellbore frame relating to the same trajectory as this blocked well will be usedproperty_kinds_list (
listofstr, optional) – if present, a list of handled property kinds which are to be set from the wellbore frame properties; if None, any handled property kinds that are present for the wellbore frame will be usedrealization (
int, optional) – if present, wellbore frame properties will be filtered by this realization number and it will be assigned to the blocked well properties that are createdset_length (
bool, optional) – if True, a length property will be generated based on active measured depth intervals; if None, will be set True if length is in list of property kinds being processedset_perforation_fraction (
bool, optional) – if True, a perforation fraction property will be created based on the fraction of the measured depth within a blocked well cell that is flagged as active, ie. perforated at some time; if None, it will be created only if length and permeability length are both absentset_frame_interval (
bool, defaultFalse) – if True, a static discrete property holding the index of the dominant active wellbore frame interval (per blocked well cell) is created
- Returns:
list of uuids of created property parts (does not include any copied time series object)
Notes
this method is designed to set up some blocked well properties based on similar properties already established on a special wellbore frame, mainly for perforations and open hole completions; frame_uuid should be specified if there are well logs in the dataset, or other wellbore frames; if a permeability thickness property is being set based on a wellbore frame property, the value is divided between blocked well cells based solely on measured depth interval lengths, without reference to grid properties such as net to gross ratio or permeability; titles will be the same as those used in the frame properties, and ‘PPERF’ for partial perforation; if set_frame_interval is True, the resulting property will be given a soft relationship with the wellbore frame (in addition to its supporting representation reference relationship with the blocked well); a null value of -1 is used where no active frame interval is present in a cell; units of measure will also be the same as those in the wellbore frame; this method only supports single grid blocked wells at present; wellbore frame must be in the same model as this blocked well
- append_extra_metadata(meta_dict)
Append a given dictionary of metadata to the existing metadata.
- box(grid_uuid=None)[source]
Returns the KJI box containing the cells visited by the well, for single grid if grid_uuid is None.
- cell_indices_and_grid_list()[source]
Returns a numpy int array of shape (N, 3) of cells visited by well, and a list of grid objects of length N.
- cell_indices_for_grid_uuid(grid_uuid)[source]
Returns a numpy int array of shape (N, 3) of cells visited by well in specified grid.
- cell_indices_kji0()[source]
Returns a numpy int array of shape (N, 3) of cells visited by well, for a single grid situation.
- property citation_title
Citation block title equivalent to self.title.
- compressed_grid_indices()[source]
Returns a list of grid indices excluding the -1 elements (unblocked intervals).
Note
length will match that of cell_indices
- compute_from_trajectory(trajectory, grid, active_only=False, quad_triangles=True, use_single_layer_tactics=True, lazy=False)[source]
Populate this blocked wellbore object based on intersection of trajectory with cells of grid.
- Parameters:
trajectory (
Trajectory object) – the trajectory to intersect with the grid; control_points and crs_uuid attributes must be populatedgrid (
grid.Grid object) – the grid with which to intersect the trajectoryactive_only (
boolean, defaultFalse) – if True, only active cells are included as blocked intervalsquad_triangles (
boolean, defaultTrue) – if True, 4 triangles per cell face are used for the intersection calculations; if False, only 2 triangles per face are useduse_single_layer_tactics (
boolean, defaultTrue) – if True and the grid does not have k gaps, initial intersection calculations with fault planes or the outer IK & JK skin of the grid are calculated as if the grid is a single layer (and only after an intersection is thus found is the actual layer identified); this significantly speeds up computation but may cause failure in the presence of significantly non-straight pillars and could (rarely) cause problems where a fault plane is significantly skewed (non-planar) even if individual pillars are straightlazy (
boolean, defaultFalse) – if True, initial penetration must be through a top K face and blocking will cease as soon as the trajectory first leaves the gridded volume; if False, initial entry may be through any external face or a fault face and re-entry will be handled
Note
this method is computationally intensive and might take ~30 seconds for a tyipical grid and trajectory; large grids, grids with k gaps, or setting use_single_layer_tactics False will typically result in significantly longer processing time
- create_feature_and_interpretation(shared_interpretation=True)[source]
Instantiate new empty WellboreFeature and WellboreInterpretation objects.
Note
uses the Blocked well citation title or other related object title as the well name
- create_md_datum_and_trajectory(grid, trajectory_mds, trajectory_points, length_uom, well_name, set_depth_zero=False, set_tangent_vectors=False, create_feature_and_interp=True)[source]
Creates an Md Datum object and a (simulation) Trajectory object for this blocked well.
Note
not usually called directly; used by import methods
- create_xml(ext_uuid=None, create_for_trajectory_if_needed=True, add_as_part=True, add_relationships=True, title=None, originator=None)[source]
Create a blocked wellbore representation node from this BlockedWell object, optionally add as part.
Note
trajectory xml node must be in place before calling this function; witsml log reference, interval stratigraphic units, and cell fluid phase units not yet supported
- dataframe(i_col='IW', j_col='JW', k_col='L', one_based=True, extra_columns_list=[], ntg_uuid=None, perm_i_uuid=None, perm_j_uuid=None, perm_k_uuid=None, satw_uuid=None, sato_uuid=None, satg_uuid=None, region_uuid=None, radw=None, skin=None, stat=None, active_only=False, min_k0=None, max_k0=None, k0_list=None, min_length=None, min_kh=None, max_depth=None, max_satw=None, min_sato=None, max_satg=None, perforation_list=None, region_list=None, depth_inc_down=None, set_k_face_intervals_vertical=False, anglv_ref='normal ij down', angla_plane_ref=None, length_mode='MD', length_uom=None, use_face_centres=False, preferential_perforation=True, add_as_properties=False, use_properties=False, property_time_index=None, time_series_uuid=None)[source]
Returns a pandas data frame containing Nexus WELLSPEC style data.
- Parameters:
i_col (
string, default'IW') – the column name to use for cell I index valuesj_col (
string, default'JW') – the column name to use for cell J index valuesk_col (
string, default'L') – the column name to use for cell K index valuesone_based (
boolean, defaultTrue) – if True, simulator protocol i, j & k values are placed in I, J & K columns; if False, resqml zero based values; this does not affect the interpretation of min_k0 & max_k0 argumentsextra_columns_list (
listofstring, optional) – list of WELLSPEC column names to include in the dataframe, from currently recognised values: ‘GRID’, ‘ANGLA’, ‘ANGLV’, ‘LENGTH’, ‘KH’, ‘DEPTH’, ‘MD’, ‘X’, ‘Y’, ‘RADW’, ‘SKIN’, ‘PPERF’, ‘RADB’, ‘WI’, ‘WBC’ntg_uuid (
uuid.UUID, optional) – the uuid of the net to gross ratio property; if present is used to downgrade the i & j permeabilities in the calculation of KH; ignored if ‘KH’ not in the extra column list and min_kh is not specified; the argument may also be a dictionary mapping from grid uuid to ntg uuid; if no net to gross data is provided, it is effectively assumed to be one (or, equivalently, the I & J permeability data is applicable to the gross rock); see also preferential_perforation argument which can cause adjustment of effective ntg in partially perforated cellsperm_i_uuid (
uuid.UUIDordictionary, optional) – the uuid of the permeability property in the I direction; required if ‘KH’ is included in the extra columns list and min_kh is not specified; ignored otherwise; the argument may also be a dictionary mapping from grid uuid to perm I uuidperm_j_uuid (
uuid.UUID, optional) – the uuid (or dict) of the permeability property in the J direction; defaults to perm_i_uuidperm_k_uuid (
uuid.UUID, optional) – the uuid (or dict) of the permeability property in the K direction; defaults to perm_i_uuidsatw_uuid (
uuid.UUID, optional) – the uuid of a water saturation property; required if max_satw is specified; may also be a dictionary mapping from grid uuid to satw uuid; ignored if max_satw is Nonesato_uuid (
uuid.UUID, optional) – the uuid of an oil saturation property; required if min_sato is specified; may also be a dictionary mapping from grid uuid to sato uuid; ignored if min_sato is Nonesatg_uuid (
uuid.UUID, optional) – the uuid of a gas saturation property; required if max_satg is specified; may also be a dictionary mapping from grid uuid to satg uuid; ignored if max_satg is Noneregion_uuid (
uuid.UUID, optional) – the uuid of a discrete or categorical property, required if region_list is not None; may also be a dictionary mapping from grid uuid to region uuid; ignored if region_list is Noneradw (
float, optional) – if present, the wellbore radius used for all perforations; must be in correct units for intended use of the WELLSPEC style dataframe; will default to 0.33 ft or 0.1 m if ‘RADW’ is included in the extra column listskin (
float, optional) – if present, a skin column is included with values set to this constantstat (
string, optional) – if present, should be ‘ON’ or ‘OFF’ and is used for all perforations; will default to ‘ON’ if ‘STAT’ is included in the extra column listactive_only (
boolean, defaultFalse) – if True, only cells that are flagged in the grid object as active are included; if False, cells are included whether active or notmin_k0 (
int, optional) – if present, perforations in layers above this are excluded (layer number will be applied naively to all grids – not recommended when working with more than one grid with different layering)max_k0 (
int, optional) – if present, perforations in layers below this are excluded (layer number will be applied naively to all grids – not recommended when working with more than one grid with different layering)k0_list (
listofint, optional) – if present, only perforations in cells in these layers are included (layer numbers will be applied naively to all grids – not recommended when working with more than one grid with different layering)min_length (
float, optional) – if present, a minimum length for an individual perforation interval to be included; units are the length units of the trajectory object unless length_uom argument is setmin_kh (
float, optional) – if present, the minimum permeability x length value for which an individual interval is included; permeabilty uuid(s) must be supplied for the kh calculation; units of the length component are those of the trajectory object unless length_uom argument is setmax_depth (
float, optional) – if present, rows are excluded for cells with a centre point depth greater than this value; max_depth should be positive downwards, with units of measure those of the grid z coordinatesmax_satw (
float, optional) – if present, perforations in cells where the water saturation exceeds this value will be excluded; satw_uuid must be supplied if this argument is presentmin_sato (
float, optional) – if present, perforations in cells where the oil saturation is less than this value will be excluded; sato_uuid must be supplied if this argument is presentmax_satg (
float, optional) – if present, perforations in cells where the gas saturation exceeds this value will be excluded; satg_uuid must be supplied if this argument is presentperforation_list (
listof(float,float), optional) – if present, a list of perforated intervals; each entry is the start and end measured depths for a perforation; these do not need to align with cell boundariesregion_list (
listofint, optional) – if present, a list of region numbers for which rows are to be included; the property holding the region data is identified by the region_uuid argumentdepth_inc_down (
boolean, optional) – if present and True, the depth values will increase with depth; if False or None, the direction of the depth values will be determined by the z increasing downwards indicator in the trajectory crsset_k_face_intervals_vertical (
boolean, defaultFalse) – if True, intervals with entry through K- and exit through K+ will have angla and anglv set to 0.0 (vertical); if False angles will be computed depending on geometryanglv_ref (
string, default'normal ij down') – either ‘gravity’, ‘z down’ (same as gravity), ‘z+’, ‘k down’, ‘k+’, ‘normal ij’, or ‘normal ij down’; the ANGLV angles are relative to a local (per cell) reference vector selected by this keywordangla_plane_ref (
string, optional) – string indicating normal vector defining plane onto which trajectory and I axis are projected for the calculation of ANGLA; options as for anglv_ref, or ‘normal well i+’ which results in no projection; defaults to the same as anglv_reflength_mode (
string, default'MD') – ‘MD’ or ‘straight’ indicating which length to use; ‘md’ takes measured depth difference between exit and entry; ‘straight’ uses a naive straight line length between entry and exit; this will affect values for LENGTH, KH, DEPTH, X & Ylength_uom (
string, optional) – if present, either ‘m’ or ‘ft’: the length units to use for the LENGTH, KH, MD, DEPTH, RADW, X & Y columns if they are present in extra_columns_list; also used to interpret min_length and min_kh; if None, the length units of the trajectory attribute are used LENGTH, KH & MD and those of the grid are used for RADW, DEPTH, X & Y; also used implicitly to determine conversion constant used in calculation of wellbore constant (WBC); if radw is provided as an argument, it is assumed to be already in this length uomuse_face_centres (
boolean, defaultFalse) – if True, the centre points of the entry and exit faces will determine the vector used as the basis of ANGLA and ANGLV calculations; if False, the trajectory locations for the entry and exit measured depths will be usedpreferential_perforation (
boolean, defaultTrue) – if perforation_list is given, and KH is requested or a min_kh given, the perforated intervals are assumed to penetrate pay rock preferentially: an effective ntg weighting is computed to account for any residual non-pay perforated interval; ignored if perforation_list is None or kh values are not being computedadd_as_properties (
booleanorlistofstr, defaultFalse) – if True, each column in the extra_columns_list (excluding GRID) is added as a property with the blocked well as supporting representation and ‘cells’ as the indexable element; any cell that is excluded from the dataframe will have corresponding entries of NaN in all the properties; if a list is provided it must be a subset of extra_columns_listuse_properties (
booleanorlistofstr, defaultFalse) – if True, each column in the extra_columns_list (excluding GRID) is populated from a property with citation title matching the column name, if it existsproperty_time_index (
int, optional) – if present and use_properties is True, the time index to select properties for; if add_as_properties is True, the time index to tag this set of properties withtime_series_uuid (
uuid, optional) – the uuid of the time series for time dependent properties being added
Notes
units of length along wellbore will be those of the trajectory’s length_uom (also applies to K.H values) unless the length_uom argument is used;
the constraints are applied independently for each row and a row is excluded if it fails any constraint;
the min_k0 and max_k0 arguments do not stop later rows within the layer range from being included;
the min_length and min_kh limits apply to individual cell intervals and thus depend on cell size;
the water and oil saturation limits are for saturations at a single time and affect whether the interval is included in the dataframe
to turn perforations off and on over time create a time series dependent bunch of boolean properties on the blocked well, with title ‘STAT’ or local property kind ‘well connection open’;
the saturation limits do not stop deeper intervals with qualifying saturations from being included;
the k0_list, perforation_list and region_list arguments should be set to None to disable the corresponding functionality, if set to an empty list, no rows will be included in the dataframe;
if add_as_properties is True, the blocked well must already have been added as a part to the model;
add_as_properties and use_properties cannot both be True;
add_as_properties and use_properties are only currently functional for single grid blocked wells;
- derive_from_cell_list(cell_kji0_list, well_name, grid, length_uom=None)[source]
Populate empty blocked well from numpy int array of shape (N, 3) being list of cells.
- derive_from_dataframe(df, well_name, grid, grid_name_to_check=None, use_face_centres=True, add_as_properties=False, length_uom=None)[source]
Populate empty blocked well from WELLSPEC-like dataframe; first columns must be IW, JW, L (i, j, k).
Note
if add_as_properties is True or present as a list of wellspec column names, both the blocked well and the properties will have their hdf5 data written, xml created and be added as parts to the model
- derive_from_wellspec(wellspec_file, well_name, grid, check_grid_name=False, use_face_centres=False, add_properties=True, usa_date_format=False, last_data_only=False, length_uom=None)[source]
Populates empty blocked well from Nexus WELLSPEC data; creates simulation trajectory and md datum.
- Parameters:
wellspec_file (
string) – path of Nexus ascii file holding WELLSPEC keywordwell_name (
string) – the name of the well as used in the wellspec datagrid (
grid.Grid object) – the grid object which the cell indices in the wellspec data relate tocheck_grid_name (
boolean, defaultFalse) – if True, the GRID column of the wellspec data will be checked for a match with the citation title of the grid object; perforations for other grids will be skipped; if False, all wellspec data is assumed to relate to the griduse_face_centres (
boolean, defaultFalse) – if True, cell face centre points are used for the entry and exit points when constructing the simulation trajectory; if False and ANGLA & ANGLV data are available then entry and exit points are constructed based on a straight line at those angles passing through the centre of the celladd_properties (
boolorlistofstr, defaultTrue) – if True, WELLSPEC columns (other than IW, JW, L & GRID) are added as property parts for the blocked well; if a list is passed, it must contain a subset of the columns in the WELLSPEC datausa_date_format (
bool, defaultFalse) – if True, dates in the WELLSPEC file are interpreted as being in USA format (MM/DD/YYYY); otherwise European format (DD/MM/YYYY)last_data_only (
bool, defaultFalse) – If True, only the last entry of well data in the file is used and no time series or time index is used if properties are being addedlength_uom (
str, optional) – if present, the target length units for MD data in generated objects; if None, will default to z units of grid crs
- Returns:
self if successful; None otherwise
Note
if add_properties is True or present as a list, this method will write the hdf5, create the xml and add parts to the model for this blocked well and the properties
- entry_and_exit_mds(cell_index)[source]
Returns entry and exit measured depths for a blocked cell.
- Parameters:
cell_index (
int) – the index of the cell in the blocked cells list; 0 <= cell_index < cell_count- Returns:
(float, float) being the entry and exit measured depths for the cell, along the trajectory; uom is held in trajectory object
- extract_property_collection(refresh=False)[source]
Returns a property collection for the blocked well.
- face_pair_array()[source]
Returns numpy int array of shape (N, 2, 2) being pairs of face (axis, polarity) pairs, to go with cell_kji0_array().
Notes
each of the N rows in the returned array is of the form ((entry_face_axis, entry_face_polarity), (exit_face_axis, exit_face_polarity)); where the axis values are in the range 0 to 2 for k, j & i respectively, and the polarity values are zero for the ‘negative’ face and 1 for the ‘positive’ face; exit values may be -1 to indicate TD within the cell (ie. no exit point)
- frame_contributions_list(wbf)[source]
Returns wellbore frame contributions to each cell in this blocked well.
- Parameters:
wbf (
WellboreFrame) – the wellbore frame to map to this blocked well- Returns:
- list of list of (int, float, float) with one entry per blocked well cell, and each
- entry being a list of (wellbore frame interval index,
fraction of wellbore frame interval in cell, fraction of cell’s wellbore interval in wellbore frame interval)
- grid_uuid_list()[source]
Returns a list of the uuids of the grids referenced by the blocked well object.
- import_from_rms_cellio(cellio_file, well_name, grid, include_overburden_unblocked_interval=False, set_tangent_vectors=False)[source]
Populates empty blocked well from RMS cell I/O data; creates simulation trajectory and md datum.
- Parameters:
cellio_file (
string) – path of RMS ascii export file holding blocked well cell I/O data; cell entry and exit points are expectedwell_name (
string) – the name of the well as used in the cell I/O filegrid (
grid.Grid object) – the grid object which the cell indices in the cell I/O data relate toset_tangent_vectors (
boolean, defaultFalse) – if True, tangent vectors will be computed from the well trajectory’s control points
- Returns:
self if successful; None otherwise
- interval_for_cell(cell_index)[source]
Returns the interval index for a given cell index (identical if there are no unblocked intervals).
- kji0_marker(active_only=True)[source]
Convenience method returning (k0, j0, i0), grid_uuid of first blocked interval.
- property logs
Returns blocked well property collection of all well log properties.
- map_cell_and_grid_indices()[source]
Returns a list of index values linking the grid_indices to cell_indices.
Note
length will match grid_indices, and will show -1 where cell is unblocked
- property part
Standard part name corresponding to self.uuid.
- property root
XML node corresponding to self.uuid.
- set_for_column(well_name, grid, col_ji0, skip_inactive=True, length_uom=None)[source]
Populates empty blocked well for a ‘vertical’ well in given column; creates simulation trajectory and md datum.
- single_grid()[source]
Asserts that exactly one grid is being referenced and returns a grid object for that grid.
- static_kh(ntg_uuid=None, perm_i_uuid=None, perm_j_uuid=None, perm_k_uuid=None, satw_uuid=None, sato_uuid=None, satg_uuid=None, region_uuid=None, active_only=False, min_k0=None, max_k0=None, k0_list=None, min_length=None, min_kh=None, max_depth=None, max_satw=None, min_sato=None, max_satg=None, perforation_list=None, region_list=None, set_k_face_intervals_vertical=False, anglv_ref='gravity', angla_plane_ref=None, length_mode='MD', length_uom=None, use_face_centres=False, preferential_perforation=True)[source]
Returns the total static K.H (permeability x height).
Notes
length units are those of trajectory md_uom unless length_upm is set; see doc string for dataframe() method for argument descriptions; perm_i_uuid required
- try_reuse()
Look for an equivalent existing RESQML object and modify the uuid of this object if found.
- Returns:
boolean – True if an equivalent object was found, False if not
Note
by design this method may change this object’s uuid as a side effect
- wb_cell_for_md(md)[source]
Return blocked well cell index and fractional distance into cell md interval, for given md.
- property well_name
Alias for title
- write_hdf5(file_name=None, mode='a', create_for_trajectory_if_needed=True)[source]
Create or append to an hdf5 file, writing datasets for the measured depths, grid, cell & face indices.
- write_wellspec(wellspec_file, well_name=None, mode='a', extra_columns_list=[], ntg_uuid=None, perm_i_uuid=None, perm_j_uuid=None, perm_k_uuid=None, satw_uuid=None, sato_uuid=None, satg_uuid=None, region_uuid=None, radw=None, skin=None, stat=None, active_only=False, min_k0=None, max_k0=None, k0_list=None, min_length=None, min_kh=None, max_depth=None, max_satw=None, min_sato=None, max_satg=None, perforation_list=None, region_list=None, set_k_face_intervals_vertical=False, depth_inc_down=True, anglv_ref='gravity', angla_plane_ref=None, length_mode='MD', length_uom=None, preferential_perforation=True, space_instead_of_tab_separator=True, align_columns=True, preceeding_blank_lines=0, trailing_blank_lines=0, length_uom_comment=False, write_nexus_units=True, float_format='5.3', use_properties=False, property_time_index=None)[source]
Writes Nexus WELLSPEC keyword to an ascii file.
- Returns:
pandas DataFrame containing data that has been written to the wellspec file
Note
see doc string for dataframe() method for most of the argument descriptions; align_columns and float_format arguments are deprecated and no longer used
- xyz_marker(active_only=True)[source]
Convenience method returning (x, y, z), crs_uuid of perforation in first blocked interval.
Notes
active_only argument not yet in use; returns None, None if no blocked interval found
- title
Citation title
- originator
Creator of object. By default, user id.
- uuid
Unique identifier