discretize.base.BaseTensorMesh.get_interpolation_matrix#
- BaseTensorMesh.get_interpolation_matrix(loc, location_type='cell_centers', zeros_outside=False, **kwargs)[source]#
Construct a linear interpolation matrix from mesh.
This method constructs a linear interpolation matrix from tensor locations (nodes, cell-centers, faces, etc…) on the mesh to a set of arbitrary locations.
- Parameters
- loc(
n_pts
,dim
)numpy.ndarray
Location of points being to interpolate to. Must have same dimensions as the mesh.
- location_type
str
,optional
Tensor locations on the mesh being interpolated from. location_type must be one of:
‘Ex’, ‘edges_x’ -> x-component of field defined on x edges
‘Ey’, ‘edges_y’ -> y-component of field defined on y edges
‘Ez’, ‘edges_z’ -> z-component of field defined on z edges
‘Fx’, ‘faces_x’ -> x-component of field defined on x faces
‘Fy’, ‘faces_y’ -> y-component of field defined on y faces
‘Fz’, ‘faces_z’ -> z-component of field defined on z faces
‘N’, ‘nodes’ -> scalar field defined on nodes
‘CC’, ‘cell_centers’ -> scalar field defined on cell centers
‘CCVx’, ‘cell_centers_x’ -> x-component of vector field defined on cell centers
‘CCVy’, ‘cell_centers_y’ -> y-component of vector field defined on cell centers
‘CCVz’, ‘cell_centers_z’ -> z-component of vector field defined on cell centers
- zeros_outsidebool,
optional
If False, nearest neighbour is used to compute the interpolate value at locations outside the mesh. If True , values at locations outside the mesh will be zero.
- loc(
- Returns
- (
n_pts
,n_loc_type
)scipy.sparse.csr_matrix
A sparse matrix which interpolates the specified tensor quantity on mesh to the set of specified locations.
- (
Examples
Here is a 1D example where a function evaluated on the nodes is interpolated to a set of random locations. To compare the accuracy, the function is evaluated at the set of random locations.
>>> from discretize import TensorMesh >>> import numpy as np >>> import matplotlib.pyplot as plt >>> np.random.seed(14)
>>> locs = np.random.rand(50)*0.8+0.1 >>> dense = np.linspace(0, 1, 200) >>> fun = lambda x: np.cos(2*np.pi*x)
>>> hx = 0.125 * np.ones(8) >>> mesh1D = TensorMesh([hx]) >>> Q = mesh1D.get_interpolation_matrix(locs, 'nodes')
(Source code, png, pdf)
Here, demonstrate a similar example on a 2D mesh using a 2D Gaussian distribution. We interpolate the Gaussian from the nodes to cell centers and examine the relative error.
>>> hx = np.ones(10) >>> hy = np.ones(10) >>> mesh2D = TensorMesh([hx, hy], x0='CC') >>> def fun(x, y): ... return np.exp(-(x**2 + y**2)/2**2)
>>> nodes = mesh2D.nodes >>> val_nodes = fun(nodes[:, 0], nodes[:, 1]) >>> centers = mesh2D.cell_centers >>> val_centers = fun(centers[:, 0], centers[:, 1]) >>> A = mesh2D.get_interpolation_matrix(centers, 'nodes') >>> val_interp = A.dot(val_nodes)