コード例 #1
0
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")
コード例 #2
0
ファイル: test_exchange.py プロジェクト: stb2145/xgcm
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')