def test_vector_diff_interp_connected_grid_x_to_y(ds, ds_face_connections_x_to_y): # simplest scenario with one face connection grid = Grid(ds, face_connections=ds_face_connections_x_to_y) # interp u and v to cell center vector_center = grid.interp_2d_vector( { "X": ds.u, "Y": ds.v }, to="center", boundary="fill", fill_value=100, ) u_c_interp = vector_center["X"] vector_diff = grid.diff_2d_vector( { "X": ds.u, "Y": ds.v }, to="center", boundary="fill", fill_value=100, ) u_c_diff = vector_diff["X"] # first point should be normal np.testing.assert_allclose(u_c_interp.data[0, 0, :], 0.5 * (ds.u.data[0, 0, :] + ds.u.data[0, 1, :])) np.testing.assert_allclose(u_c_diff.data[0, 0, :], ds.u.data[0, 1, :] - ds.u.data[0, 0, :]) # last point should be fancy np.testing.assert_allclose( u_c_interp.data[0, -1, :], 0.5 * (ds.u.data[0, -1, :] + ds.v.data[1, ::-1, 0])) np.testing.assert_allclose(u_c_diff.data[0, -1, :], -ds.u.data[0, -1, :] + ds.v.data[1, ::-1, 0]) # TODO: figure out tangent vectors with pytest.raises(NotImplementedError): _ = grid.interp_2d_vector({ "X": ds.v, "Y": ds.u }, to="left", boundary="fill") with pytest.raises(NotImplementedError): _ = grid.interp_2d_vector({"X": ds.v, "Y": ds.u}, boundary="fill")
def test_vector_diff_interp_connected_grid_x_to_y(ds, ds_face_connections_x_to_y): # simplest scenario with one face connection grid = Grid(ds, face_connections=ds_face_connections_x_to_y) # interp u and v to cell center vector_center = grid.interp_2d_vector({ 'X': ds.u, 'Y': ds.v }, to='center', boundary='fill') u_c_interp, v_c_interp = vector_center['X'], vector_center['Y'] vector_diff = grid.diff_2d_vector({ 'X': ds.u, 'Y': ds.v }, to='center', boundary='fill') u_c_diff, v_c_diff = vector_diff['X'], vector_diff['Y'] # first point should be normal np.testing.assert_allclose(u_c_interp.data[0, 0, :], 0.5 * (ds.u.data[0, 0, :] + ds.u.data[0, 1, :])) np.testing.assert_allclose(u_c_diff.data[0, 0, :], ds.u.data[0, 1, :] - ds.u.data[0, 0, :]) # last point should be fancy np.testing.assert_allclose( u_c_interp.data[0, -1, :], 0.5 * (ds.u.data[0, -1, :] + ds.v.data[1, ::-1, 0])) np.testing.assert_allclose(u_c_diff.data[0, -1, :], -ds.u.data[0, -1, :] + ds.v.data[1, ::-1, 0]) # TODO: figure out tangent vectors with pytest.raises(NotImplementedError): vector_corner = grid.interp_2d_vector({ 'X': ds.v, 'Y': ds.u }, to='left', boundary='fill') with pytest.raises(NotImplementedError): vector_corner = grid.interp_2d_vector({ 'X': ds.v, 'Y': ds.u }, boundary='fill')