LoopStructural.interpolators.DiscreteFoldInterpolator#
- class LoopStructural.interpolators.DiscreteFoldInterpolator(support, fold: FoldEvent | None = None)#
Bases:
P1Interpolator
A piecewise linear interpolator that can also use fold constraints defined in Laurent et al., 2016
- Parameters:
support – discrete support with nodes and elements etc
FoldEvent (fold) – a fold event with a valid geometry
- __init__(support, fold: FoldEvent | None = None)#
A piecewise linear interpolator that can also use fold constraints defined in Laurent et al., 2016
- Parameters:
support – discrete support with nodes and elements etc
FoldEvent (fold) – a fold event with a valid geometry
Methods
__init__
(support[, fold])A piecewise linear interpolator that can also use fold constraints defined in Laurent et al., 2016
add_constraints_to_least_squares
(A, B, idc)Adds constraints to the least squares system.
add_equality_constraints
(node_idx, values[, ...])Adds hard constraints to the least squares system.
add_fold_constraints
([fold_orientation, ...])- param fold_orientation:
weight for the fold direction/orientation in the least squares system
add_gradient_constraints
([w])add_gradient_orthogonal_constraints
(points, ...)constraints scalar field to be orthogonal to a given vector
add_interface_constraints
([w])add_norm_constraints
([w])Adds the constraints \(f(X)\cdotT=0\)
add_value_constraints
([w])build_matrix
([square, damp, ie])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
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
- returns:
numpy array
get_inequality_constraints
()Get the location of interface constraints
- returns:
numpy array
- returns:
numpy array
- returns:
numpy array
minimise_edge_jumps
([w, vector_func, ...])Remove constraints from the least squares system using the constraint ids which corresponds to the rows in the interpolation matrix.
reset
()Reset the interpolation constraints
set_gradient_constraints
(points)- param points:
array containing the value constraints usually 7-8 columns.
set_inequality_pairs_constraints
(pointsa, ...)set_interface_constraints
(points)set_interpolation_weights
(weights)Set the interpolation weights dictionary
set_normal_constraints
(points)- param points:
array containing the value constraints usually 7-8 columns.
set_region
([region])Set the region of the support the interpolator is working on
set_tangent_constraints
(points)- param points:
array containing the value constraints usually 7-8 columns.
set_value_constraints
(points)- param points:
array containing the value constraints usually 4-5 columns.
set_value_inequality_constraints
(points)setup
(**kwargs)Runs all of the required setting up stuff
setup_interpolator
(**kwargs)Searches through kwargs for any interpolation weights and updates the dictionary.
solve_system
([solver])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.
update_fold
(fold)- param fold:
a fold that contrains the geometry we are trying to add
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_fold_constraints(fold_orientation=10.0, fold_axis_w=10.0, fold_regularisation=[0.1, 0.01, 0.01], fold_normalisation=1.0, fold_norm=1.0, step=2)#
- Parameters:
fold_orientation (double) – weight for the fold direction/orientation in the least squares system
fold_axis_w (double) – weight for the fold axis in the least squares system
fold_regularisation (list) – weight for the fold regularisation in the least squares system
fold_normalisation (double) – weight for the fold norm constraint in the least squares system
fold_norm – length of the interpolation norm in the least squares system
step (int) – array step for adding constraints
Notes
For more information about the fold weights see EPSL paper by Gautier Laurent 2016
- add_gradient_orthogonal_constraints(points: ndarray, vector: ndarray, w: float = 1.0, B: float = 0, name='undefined gradient orthogonal constraint')#
constraints scalar field to be orthogonal to a given vector
- Parameters:
points (np.darray) – location to add gradient orthogonal constraint
vector (np.darray) – vector to be orthogonal to, should be the same shape as points
w (double) –
B (np.array) –
- add_tangent_constraints(w=1.0)#
Adds the constraints \(f(X)\cdotT=0\)
- Parameters:
w (double) –
- build_matrix(square=True, damp=0.0, ie=False)#
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
- 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
- remove_constraints_from_least_squares(name='undefined', constraint_ids=None)#
Remove constraints from the least squares system using the constraint ids which corresponds to the rows in the interpolation matrix.
- Parameters:
constraint_ids (np.array(dtype=int)) – id of constraints to remove
- 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
- setup_interpolator(**kwargs)#
Searches through kwargs for any interpolation weights and updates the dictionary. Then adds the constraints to the linear system using the interpolation weights values :param kwargs -: interpolation weights
- solve_system(solver='cg', **kwargs)#
Main entry point to run the solver and update the node value attribute for the discreteinterpolator class
- Parameters:
solver (string) – solver e.g. cg, lu, chol, custom
kwargs – kwargs for solver e.g. maxiter, preconditioner etc, damping for
- 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()#
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
- update_fold(fold)#
- Parameters:
fold (FoldEvent) – a fold that contrains the geometry we are trying to add