Commit 032d7ee8 by Reimar H Leike

enforcing periodic boundary conditions on linear interpolator

parent 5c69c519
 ... ... @@ -32,6 +32,7 @@ from scipy.sparse.linalg import aslinearoperator class LinearInterpolator(LinearOperator): def __init__(self, domain, positions): """ Multilinear interpolation for points in an RGSpace :param domain: RGSpace ... ... @@ -40,6 +41,8 @@ class LinearInterpolator(LinearOperator): :param positions: positions at which to interpolate Field with UnstructuredDomain, shape (dim, ndata) positions that are not within the RGSpace get wrapped according to periodic boundary conditions """ self._domain = makeDomain(domain) N_points = positions.shape[1] ... ... @@ -55,17 +58,14 @@ class LinearInterpolator(LinearOperator): pos = positions/dist excess = pos-pos.astype(int64) pos = pos.astype(int64) mask = (excess == 0.) & (pos != 0) pos[mask] -= 1 excess[mask] += 1 del mask max_index = array(self.domain[0].shape).reshape((-1,)+ndim*(1,)) data = zeros((len(mg[0]), N_points)) ii = zeros((len(mg[0]), N_points), dtype=int64) jj = zeros((len(mg[0]), N_points), dtype=int64) for i in range(len(mg[0])): factor = prod(abs(1-mg[:, i].reshape((-1, 1))-excess), axis=0) data[i, :] = factor fromi = pos+mg[:, i].reshape((-1, 1)) fromi = (pos+mg[:, i].reshape((-1, 1))) % max_index ii[i, :] = arange(N_points) jj[i, :] = ravel_multi_index(fromi, self.domain.shape) self._mat = coo_matrix((data.reshape(-1), ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!