# discretize.utils.active_from_xyz¶

discretize.utils.active_from_xyz(mesh, xyz, grid_reference='CC', method='linear')[source]

Returns an active cell index array below a surface

Get active cells in the mesh that are below the surface create by interpolating over the last dimension of the input points. This method will uses scipy’s interpolation routine to interpolate between input points. This will use a nearest neighbour interpolation for cell values outside the convex hull of points.

For grid_reference=’CC’, this will check if the center of a given cell in the mesh is below the interpolation surface to determine if that cell is active.

For grid_reference=’N’, this will check if every node of a given cell in the mesh is below the interpolation surface.

For the

Parameters
meshdiscretize.TensorMesh or discretize.TreeMesh or discretize.CylindricalMesh

Mesh object, (if CylindricalMesh: mesh must be symmetric).

xyznumpy.ndarray

Points coordinates shape (*, mesh.dim).

grid_reference{‘CC’, ‘N’}

Use cell coordinates from cells-center ‘CC’ or nodes ‘N’.

method{‘linear’, ‘nearest’}

Interpolation method for the xyz points.

Returns
activenumpy.ndarray

1D mask array of bool for the active cells below xyz.

Examples

import matplotlib.pyplot as plt
import numpy as np
from discretize import TensorMesh
from discretize.utils import active_from_xyz

mesh = TensorMesh([5, 5])
topo_func = lambda x: -3*(x-0.2)*(x-0.8)+.5
topo_points = np.linspace(0, 1)
topo_vals = topo_func(topo_points)

active_cc = active_from_xyz(mesh, np.c_[topo_points, topo_vals], grid_reference='CC')
ax = plt.subplot(121)
mesh.plot_image(active_cc, ax=ax)
mesh.plot_grid(centers=True, ax=ax)
ax.plot(np.linspace(0,1), topo_func(np.linspace(0,1)), color='C3')
ax.set_title("CC")

active_n = active_from_xyz(mesh, np.c_[topo_points, topo_vals], grid_reference='N')
ax = plt.subplot(122)
mesh.plot_image(active_n, ax=ax)
mesh.plot_grid(nodes=True, ax=ax)
ax.plot(np.linspace(0,1), topo_func(np.linspace(0,1)), color='C3')
ax.set_title("N")
plt.show() 