LoopStructural.interpolators.DiscreteInterpolator#
- class LoopStructural.interpolators.DiscreteInterpolator(support, data={}, c=None, up_to_date=False)#
Bases:
GeologicalInterpolator
Base class for a discrete interpolator e.g. piecewise linear or finite difference which is any interpolator that solves the system using least squares approximation
- Parameters:
support – A discrete mesh with, nodes, elements, etc
- __init__(support, data={}, c=None, up_to_date=False)#
Base class for a discrete interpolator e.g. piecewise linear or finite difference which is any interpolator that solves the system using least squares approximation
- Parameters:
support – A discrete mesh with, nodes, elements, etc
Methods
__init__
(support[, data, c, up_to_date])Base class for a discrete interpolator e.g. piecewise linear or finite difference which is any interpolator that solves the system using least squares approximation.
add_constraints_to_least_squares
(A, B, idc)Adds constraints to the least squares system.
add_equality_block
(A, B)add_equality_constraints
(node_idx, values[, ...])Adds hard constraints to the least squares system.
add_gradient_constraints
([w])add_gradient_orthogonal_constraints
(points, ...)Adds constraints for a matrix where the linear function l < Ax > u constrains the objective function
add_inequality_feature
(feature[, lower, mask])Add an inequality constraint to the interpolator using an existing feature.
add_inequality_pairs_constraints
([w, ...])add_interface_constraints
([w])add_norm_constraints
([w])Adds the constraints \(f(X)\cdotT=0\)
add_value_constraints
([w])add_value_inequality_constraints
([w])build_inequality_matrix
()Assemble constraints into interpolation matrix.
Calculates Ax-B for all constraints added to the interpolator This could be a proxy to identify which constraints are controlling the model
check_array
(array)clean
()Removes all of the data from an interpolator
Clear the constraints from the interpolator, this makes sure we are not storing the constraints after the solver has been run
debug
()Helper function for debugging when the interpolator isn't working
evaluate_gradient
(locations)Evaluate the gradient of the scalar field at the evaluation points :param evaluation_points: xyz locations to evaluate the gradient :type evaluation_points: np.array
evaluate_value
(locations)Evaluate the value of the interpolator at location
Get the location of all data points
get_inequality_pairs_constraints
()get_inequality_value_constraints
()Get the location of interface constraints
reset
()Reset the interpolation constraints
set_gradient_constraints
(points)set_inequality_pairs_constraints
(points)set_interface_constraints
(points)set_interpolation_weights
(weights)Set the interpolation weights dictionary
set_normal_constraints
(points)set_region
([region])Set the region of the support the interpolator is working on
set_tangent_constraints
(points)set_value_constraints
(points)set_value_inequality_constraints
(points)setup
(**kwargs)Runs all of the required setting up stuff
setup_interpolator
(**kwargs)Runs all of the required setting up stuff
solve_system
([solver, tol, solver_kwargs])Main entry point to run the solver and update the node value attribute for the discreteinterpolator class
to_dict
()to_json
()Returns a json representation of the geological interpolator
update
()Check if the solver is up to date, if not rerun interpolation using the previously used solver.
Attributes
data
Number of degrees of freedom for the interpolator
The active region of the interpolator.
region_map
- add_constraints_to_least_squares(A, B, idc, w=1.0, name='undefined')#
Adds constraints to the least squares system. Automatically works out the row index given the shape of the input arrays
- Parameters:
A (numpy array / list) – RxC numpy array of constraints where C is number of columns,R rows
B (numpy array /list) – B values array length R
idc (numpy array/list) – RxC column index
- Returns:
list of constraint ids
- add_equality_constraints(node_idx, values, name='undefined')#
Adds hard constraints to the least squares system. For now this just sets the node values to be fixed using a lagrangian.
- Parameters:
node_idx (numpy array/list) – int array of node indexes
values (numpy array/list) – array of node values
- add_inequality_constraints_to_matrix(A: ndarray, bounds: ndarray, idc: ndarray, name: str = 'undefined')#
Adds constraints for a matrix where the linear function l < Ax > u constrains the objective function
- Parameters:
A (numpy array) – matrix of coefficients
bounds (numpy array) – nx3 lower, upper, 1
idc (numpy array) – index of constraints in the matrix
- add_inequality_feature(feature: Callable[[ndarray], ndarray], lower: bool = True, mask: ndarray | None = None)#
Add an inequality constraint to the interpolator using an existing feature. This will make the interpolator greater than or less than the exising feature. Evaluate the feature at the interpolation nodes. Can provide a boolean mask to restrict to only some parts
- Parameters:
feature (BaseFeature) – the feature that will be used to constraint the interpolator
lower (bool, optional) – lower or upper constraint, by default True
mask (np.ndarray, optional) – restrict the nodes to evaluate on, by default None
- add_tangent_constraints(w=1.0)#
Adds the constraints \(f(X)\cdotT=0\)
- Parameters:
w (double)
- build_matrix()#
Assemble constraints into interpolation matrix. Adds equaltiy constraints using lagrange modifiers if necessary
- Parameters:
damp (bool) – Flag whether damping should be added to the diagonal of the matrix
- Returns:
Interpolation matrix and B
- calculate_residual_for_constraints()#
Calculates Ax-B for all constraints added to the interpolator This could be a proxy to identify which constraints are controlling the model
- Returns:
np.ndarray – vector of Ax-B
- clean()#
Removes all of the data from an interpolator
- clear_constraints()#
Clear the constraints from the interpolator, this makes sure we are not storing the constraints after the solver has been run
- debug()#
Helper function for debugging when the interpolator isn’t working
- evaluate_gradient(locations: ndarray) ndarray #
Evaluate the gradient of the scalar field at the evaluation points :param evaluation_points: xyz locations to evaluate the gradient :type evaluation_points: np.array
- evaluate_value(locations: ndarray) ndarray #
Evaluate the value of the interpolator at location
- Parameters:
evaluation_points (np.ndarray) – location to evaluate the interpolator
- Returns:
np.ndarray – value of the interpolator
- get_data_locations()#
Get the location of all data points
- Returns:
numpy array – Nx3 - X,Y,Z location of all data points
- get_gradient_constraints()#
- Returns:
numpy array
- get_interface_constraints()#
Get the location of interface constraints
- Returns:
numpy array – Nx4 - X,Y,Z,id location of all interface constraints
- get_norm_constraints()#
- Returns:
numpy array
- get_tangent_constraints()#
- Returns:
numpy array
- get_value_constraints()#
- Returns:
numpy array
- property nx: int#
Number of degrees of freedom for the interpolator
- Returns:
int – number of degrees of freedom, positve
- property region: ndarray#
The active region of the interpolator. A boolean mask for all elements that are interpolated
- Returns:
np.ndarray
- reset()#
Reset the interpolation constraints
- set_gradient_constraints(points: ndarray)#
- Parameters:
points (np.ndarray) – array containing the value constraints usually 7-8 columns. X,Y,Z,gx,gy,gz,weight
- set_interpolation_weights(weights)#
Set the interpolation weights dictionary
- Parameters:
dictionary (weights -) – Entry of new weights to assign to self.interpolation_weights
- set_normal_constraints(points: ndarray)#
- Parameters:
points (np.ndarray) – array containing the value constraints usually 7-8 columns. X,Y,Z,nx,ny,nz,weight
- set_region(region=None)#
Set the region of the support the interpolator is working on
- Parameters:
function(position) (region -) – return true when in region, false when out
- set_tangent_constraints(points: ndarray)#
- Parameters:
points (np.ndarray) – array containing the value constraints usually 7-8 columns. X,Y,Z,nx,ny,nz,weight
- set_value_constraints(points: ndarray)#
- Parameters:
points (np.ndarray) – array containing the value constraints usually 4-5 columns. X,Y,Z,val,weight
- setup(**kwargs)#
Runs all of the required setting up stuff
- abstract setup_interpolator(**kwargs)#
Runs all of the required setting up stuff
- solve_system(solver: Callable[[csr_matrix, ndarray], ndarray] | str | None = None, tol: float | None = None, solver_kwargs: dict = {}) bool #
Main entry point to run the solver and update the node value attribute for the discreteinterpolator class
- Parameters:
solver (string/callable) – solver ‘cg’ conjugate gradient, ‘lsmr’ or callable function
solver_kwargs – kwargs for solver check scipy documentation for more information
- Returns:
bool – True if the interpolation is run
- to_json()#
Returns a json representation of the geological interpolator
- Returns:
json (dict) – json representation of the geological interpolator
- update() bool #
Check if the solver is up to date, if not rerun interpolation using the previously used solver. If the interpolation has not been run before it will return False
- Returns:
bool