def test_vector_gradient_field(): """test the vector gradient operator""" grid = CartesianGrid([[0, 2 * np.pi], [0, 2 * np.pi]], [16, 16], periodic=True) x, y = grid.cell_coords[..., 0], grid.cell_coords[..., 1] data = [np.cos(x) + y, np.sin(y) - x] v = VectorField(grid, data) t1 = v.gradient("periodic") assert t1.data.shape == (2, 2, 16, 16) d00 = -np.sin(x) d10 = -np.ones(grid.shape) d01 = np.ones(grid.shape) d11 = np.cos(y) t2 = Tensor2Field(grid, np.array([[d00, d01], [d10, d11]])) np.testing.assert_allclose(t1.data[1:-1, 1:-1], t2.data[1:-1, 1:-1], rtol=0.1, atol=0.1) v.gradient("auto_periodic_neumann", out=t1) assert t1.data.shape == (2, 2, 16, 16) np.testing.assert_allclose(t1.data[1:-1, 1:-1], t2.data[1:-1, 1:-1], rtol=0.1, atol=0.1)
def test_vector_boundary_conditions(): """ test some boundary conditions of operators of vector fields """ grid = CartesianGrid([[0, 2 * np.pi], [0, 1]], 32, periodic=False) v_x = np.sin(grid.cell_coords[..., 0]) v_y = grid.cell_coords[..., 1] vf = VectorField(grid, np.array([v_x, v_y])) bc_x = [ { "type": "derivative", "value": [0, -1] }, { "type": "derivative", "value": [0, 1] }, ] bc_y = [{ "type": "value", "value": [0, 0] }, { "type": "value", "value": [1, 1] }] tf = vf.gradient(bc=[bc_x, bc_y]) np.testing.assert_allclose(tf[0, 1].data[1:-1, :], 0) np.testing.assert_allclose(tf[1, 1].data, 1)
def test_vector_gradient_divergence_field_cyl(): """test the divergence operator""" grid = CylindricalSymGrid(2 * np.pi, [0, 2 * np.pi], [8, 16], periodic_z=True) r, z = grid.cell_coords[..., 0], grid.cell_coords[..., 1] data = [np.cos(r) + np.sin(z) ** 2, np.cos(r) ** 2 + np.sin(z), np.zeros_like(r)] v = VectorField(grid, data=data) t = v.gradient(bc="natural") assert t.data.shape == (3, 3, 8, 16) v = t.divergence(bc="natural") assert v.data.shape == (3, 8, 16)
def test_vector_gradient(): """ test the vector gradient operator """ grid = CartesianGrid([[0, 2 * np.pi], [0, 2 * np.pi]], [16, 16], periodic=True) x, y = grid.cell_coords[..., 0], grid.cell_coords[..., 1] data = [np.cos(x) + y, np.sin(y) - x] v = VectorField(grid, data) t1 = v.gradient("periodic") assert t1.data.shape == (2, 2, 16, 16) d00 = -np.sin(x) d10 = np.ones(grid.shape) d01 = -d10.copy() d10[:, 0] = d10[:, -1] = -7 d01[0, :] = d01[-1, :] = 7 d11 = np.cos(y) t2 = Tensor2Field(grid, np.array([[d00, d01], [d10, d11]])) np.testing.assert_allclose(t1.data, t2.data, rtol=0.1, atol=0.1) v.gradient("natural", out=t1) assert t1.data.shape == (2, 2, 16, 16) np.testing.assert_allclose(t1.data, t2.data, rtol=0.1, atol=0.1)