public void build(Function3D f) { double dx = _lx / _nx; double dy = _ly / _ny; double dz = _lz / _nz; for (int k = 0; k < _nz; k++) for (int j = 0; j < _nx; j++) for (int i = 0; i < _ny; i++) set(i, j, k, f.eval(i * dx, j * dy, k * dz)); }
public void shift(double x, double y, double z) { int xs = (int) Math.round(x / (_lx / _nx)); int ys = (int) Math.round(y / (_ly / _ny)); int zs = (int) Math.round(z / (_lz / _nz)); Array3d scratch = clone(); for (int k = 0; k < _nz; k++) { int kp = (k + zs + _nz) % _nz; for (int j = 0; j < _ny; j++) { int jp = (j + ys + _ny) % _ny; for (int i = 0; i < _nx; i++) { int ip = (i + xs + _nx) % _nx; scratch.set(i, j, k, get(ip, jp, kp)); } } } DoubleArray.copy(scratch._a, _a); }