PyGEOS Tools
The pygeos-tools python package adds a variety of tools for working with pygeosx objects. These include common operations such as setting the value of geosx wrappers with python functions, parallel communication, and file IO. Examples using these tools can be found here: PYGEOSX Examples .
API
- geos.pygeos_tools.wrapper.allgather_wrapper(problem, key, ghost_key='')
Get a global copy of a wrapper as a numpy ndarray on all ranks
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
target_key (str) – Key for the target wrapper
- Returns:
The wrapper as a numpy ndarray
- Return type:
np.ndarray
- geos.pygeos_tools.wrapper.gather_wrapper(problem, key, ghost_key='')
Get a global copy of a wrapper as a numpy ndarray on rank 0
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
target_key (str) – Key for the target wrapper
- Returns:
The wrapper as a numpy ndarray
- Return type:
np.ndarray
- geos.pygeos_tools.wrapper.get_global_value_range(problem, key)
Get the range of a target value across all processes
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
target_key (str) – Key for the target wrapper
- Returns:
The global min/max of the target
- Return type:
tuple
- geos.pygeos_tools.wrapper.get_matching_wrapper_path(problem, filters)
Recursively search the group and its children for wrappers that match the filters A successful match is identified if the wrapper path contains all of the strings in the filter. For example, if filters=[‘a’, ‘b’, ‘c’], the following could match any of the following: ‘a/b/c’, ‘c/b/a’, ‘d/e/c/f/b/a/a’
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
filters (list) – a list of strings
- Returns:
Key of the matching wrapper
- Return type:
str
- geos.pygeos_tools.wrapper.get_wrapper(problem, target_key, write_flag=False)
Get a local copy of a wrapper as a numpy ndarray
- Parameters:
filename (str) – Catalog file name
problem (pygeosx.Group) – GEOSX problem handle
target_key (str) – Key for the target wrapper
write_flag (bool) – Sets write mode (default=False)
- Returns:
The wrapper as a numpy ndarray
- Return type:
np.ndarray
- geos.pygeos_tools.wrapper.get_wrapper_par(problem, target_key, allgather=False, ghost_key='')
Get a global copy of a wrapper as a numpy ndarray. Note: if ghost_key is set, it will try to remove any ghost elements
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
target_key (str) – Key for the target wrapper
allgather (bool) – Flag to trigger allgather across ranks (False)
ghost_key (str) – Key for the corresponding ghost wrapper (default=’’)
- Returns:
The wrapper as a numpy ndarray
- Return type:
np.ndarray
- geos.pygeos_tools.wrapper.plot_history(records, output_root='.', save_figures=True, show_figures=True)
Plot the time-histories for the records structure. Note: If figures are shown, the GEOSX process will be blocked until they are closed
- Parameters:
records (dict) – A dict of dicts containing the queries
output_root (str) – Path to save figures (default = ‘./’)
save_figures (bool) – Flag to indicate whether figures should be saved (default = True)
show_figures (bool) – Flag to indicate whether figures should be drawn (default = False)
- geos.pygeos_tools.wrapper.print_global_value_range(problem, key, header, scale=1.0, precision='%1.4f')
Print the range of a target value across all processes
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
target_key (str) – Key for the target wrapper
header (str) – Header to print with the range
scale (float) – Multiply the range with this value before printing (default = 1.0)
precision (str) – Format for printing the range (default = %1.4f)
- Returns:
The global min/max of the target
- Return type:
tuple
- geos.pygeos_tools.wrapper.run_queries(problem, records)
Query the current GEOSX datastructure Note: The expected record request format is as follows. For now, the only supported query is to find the min/max values of the target record = {‘path/of/wrapper’: {‘label’: ‘aperture (m)’, # A label to include with plots ‘scale’: 1.0, # Value to scale results by ‘history: [], # A list to store values over time ‘fhandle’: plt.figure() # A figure handle }}
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
records (dict) – A dict of dicts that specifies the queries to run
- geos.pygeos_tools.wrapper.search_datastructure_wrappers_recursive(group, filters, matching_paths, level=0, group_path=[])
Recursively search the group and its children for wrappers that match the filters
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
filters (list) – a list of strings
matching_paths (list) – a list of matching values
- geos.pygeos_tools.wrapper.set_wrapper_to_value(problem, key, value)
Set the value of a wrapper
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
target_key (str) – Key for the target wrapper
value (float) – Value to set the wrapper
- geos.pygeos_tools.wrapper.set_wrapper_with_function(problem, target_key, input_keys, fn, target_index=-1)
Set the value of a wrapper using a function
- Parameters:
problem (pygeosx.Group) – GEOSX problem handle
target_key (str) – Key for the target wrapper
input_keys (str, list) – The input key(s)
fn (function) – Vectorized function used to calculate target values
target_index (int) – Target index to write the output (default = all)
- geos.pygeos_tools.file_io.load_tables(axes_names: Iterable[str], property_names: Iterable[str], table_root: str = './tables', extension: str = 'csv') Tuple[Iterable[ndarray], Dict[str, ndarray]]
Load a set of tables in GEOSX format
- Parameters:
axes_names (list) – Axis file names in the target directory (with no extension)
property_names (list) – Property file names in the target directory (with not extension)
table_root (str) – Root path for the table directory
extension (str) – Table file extension (default = ‘csv’)
- Returns:
List of axes values, and dictionary of table values
- Return type:
tuple
- geos.pygeos_tools.file_io.save_tables(axes: Iterable[ndarray], properties: Dict[str, ndarray], table_root: str = './tables', axes_names: List[str] = []) None
Saves a set of tables in GEOSX format
The shape of these arrays should match the length of each axis in the specified order. The output directory will be created if it does not exist yet. If axes_names are not supplied, then they will be selected based on the dimensionality of the grid: 1D=[t]; 3D=[x, y, z]; 4D=[x, y, z, t].
- Parameters:
axes (list) – A list of numpy ndarrays defining the table axes
properties (dict) – A dict of numpy ndarrays defning the table values
table_root (str) – The root path for the output directory
axes_names (list) – A list of names for each potential axis (optional)
- geos.pygeos_tools.mesh_interpolation.apply_to_bins(fn: Callable[[float | ndarray], float], position: ndarray, value: ndarray, bins: ndarray, collapse_edges: bool = True)
Apply a function to values that are located within a series of bins Note: if a bin is empty, this function will fill a nan value
- Parameters:
fn (function) – Function that takes a single scalar or array input
position (np.ndarray) – A 1D list/array describing the location of each sample
value (np.ndarray) – A 1D list/array of values at each location
bins (np.ndarray) – The bin edges for the position data
collapse_edges (bool) – Controls the behavior of edge-data (default=True)
- Returns:
an array of function results for each bin
- Return type:
np.ndarray
- geos.pygeos_tools.mesh_interpolation.extrapolate_nan_values(x, y, slope_scale=0.0)
Fill in any nan values in two 1D arrays by extrapolating
- Parameters:
x (np.ndarray) – 1D list/array of positions
y (np.ndarray) – 1D list/array of values
slope_scale (float) – value to scale the extrapolation slope (default=0.0)
- Returns:
The input array with nan values replaced by extrapolated data
- Return type:
np.ndarray
- geos.pygeos_tools.mesh_interpolation.get_random_realization(x, bins, value, rand_fill=0, rand_scale=0, slope_scale=0)
Get a random realization for a noisy signal with a set of bins
- Parameters:
x (np.ndarray) – 1D list/array of positions
bins (np.ndarray) – 1D list/array of bin edges
value (np.ndarray) – 1D list/array of values
rand_fill (float) – The standard deviation to use where data is not defined (default=0)
rand_scale (float) – Value to scale the standard deviation for the realization (default=0)
slope_scale (float) – Value to scale the extrapolation slope (default=0.0)
- Returns:
An array containing the random realization
- Return type:
np.ndarray
- geos.pygeos_tools.mesh_interpolation.get_realizations(x, bins, targets)
Get random realizations for noisy signals on target bins
- Parameters:
x (np.ndarray) – 1D list/array of positions
bins (np.ndarray) – 1D list/array of bin edges
targets (dict) – Dict of geosx target keys, inputs to get_random_realization
- Returns:
Dictionary of random realizations
- Return type:
dict
- geos.pygeos_tools.well_log.convert_E_nu_to_K_G(E, nu)
Convert young’s modulus and poisson’s ratio to bulk and shear modulus
- Parameters:
E (float, np.ndarray) – Young’s modulus
nu (float, np.ndarray) – Poisson’s ratio
- Returns:
bulk modulus, shear modulus with same size as inputs
- Return type:
tuple
- geos.pygeos_tools.well_log.estimate_shmin(z, rho, nu)
Estimate the minimum horizontal stress using the poisson’s ratio
- Parameters:
z (float, np.ndarray) – Depth
rho (float, np.ndarray) – Density
nu (float, np.ndarray) – Poisson’s ratio
- Returns:
minimum horizontal stress
- Return type:
float
- geos.pygeos_tools.well_log.parse_las(fname, variable_start='~C', body_start='~A')
Parse an las format log file
- Parameters:
fname (str) – Path to the log file
variable_start (str) – A string that indicates the start of variable header information (default = ‘~CURVE INFORMATION’)
body_start (str) – a string that indicates the start of the log body (default = ‘~A’)
- Returns:
a dict containing the values and unit definitions for each variable in the log
- Return type:
np.ndarray