Пример #1
0
def test_vertical_derivatives(test_dataset):
    ds = test_dataset
    H = ds.attrs['H']
    dz = ds.attrs['dz']

    # vertical function of z at cell interface
    f = np.sin(np.pi * ds.Zp1.values / H)
    ds['f'] = (('Zp1'), f)
    ds['fl'] = ('Zl', f[:-1])
    # TODO: build in negative sign logic more carefully
    df = -np.diff(f)
    ds['df'] = ('Z', df)
    fill_value = 0.
    ds['dfl'] = ('Z', np.hstack([df[:-1], f[-2]-fill_value]))
    ds['dfdz'] = ds['df'] / dz
    ds['dfldz'] = ds['dfl'] / dz

    # vertical function at cell center
    g = np.sin(np.pi * ds.Z.values / H)
    ds['g'] = ('Z', g)
    dg = -np.diff(g)
    dsdg = DataArray(dg, {'Zp1': ds.Zp1[1:-1]}, 'Zp1')
    dsdgdf = dsdg / dz

    gcm = GCMDataset(ds)
    gcm_df = gcm.diff_zp1_to_z(ds.f)
    assert gcm_df.equals(ds.df), (gcm_df, ds.df)
    gcm_dfdz = gcm.derivative_zp1_to_z(ds.f)
    assert gcm_dfdz.equals(ds.dfdz), (gcm_dfdz, ds.dfdz)
    gcm_dfl = gcm.diff_zl_to_z(ds.fl, fill_value)
    assert gcm_dfl.equals(ds.dfl), (gcm_dfl, ds.dfl)
    gcm_dfldz = gcm.derivative_zl_to_z(ds.fl, fill_value)
    assert gcm_dfldz.equals(ds.dfldz), (gcm_dfldz, ds.dfldz)
    gcm_dg = gcm.diff_z_to_zp1(ds.g)
    assert gcm_dg.equals(dsdg), (gcm_dg, dsdg)
    gcm_dgdf = gcm.derivative_z_to_zp1(ds.g)
    assert gcm_dgdf.equals(dsdgdf), (gcm_dgdf, dsdgdf)
Пример #2
0
def test_vertical_derivatives(test_dataset):
    ds = test_dataset
    H = ds.attrs["H"]
    dz = ds.attrs["dz"]

    # vertical function of z at cell interface
    f = np.sin(np.pi * ds.Zp1.values / H)
    ds["f"] = (("Zp1"), f)
    ds["fl"] = ("Zl", f[:-1])
    # TODO: build in negative sign logic more carefully
    df = -np.diff(f)
    ds["df"] = ("Z", df)
    fill_value = 0.0
    ds["dfl"] = ("Z", np.hstack([df[:-1], f[-2] - fill_value]))
    ds["dfdz"] = ds["df"] / dz
    ds["dfldz"] = ds["dfl"] / dz

    # vertical function at cell center
    g = np.sin(np.pi * ds.Z.values / H)
    ds["g"] = ("Z", g)
    dg = -np.diff(g)
    dsdg = DataArray(dg, {"Zp1": ds.Zp1[1:-1]}, "Zp1")
    dsdgdf = dsdg / dz

    gcm = GCMDataset(ds)
    gcm_df = gcm.diff_zp1_to_z(ds.f)
    assert gcm_df.equals(ds.df), (gcm_df, ds.df)
    gcm_dfdz = gcm.derivative_zp1_to_z(ds.f)
    assert gcm_dfdz.equals(ds.dfdz), (gcm_dfdz, ds.dfdz)
    gcm_dfl = gcm.diff_zl_to_z(ds.fl, fill_value)
    assert gcm_dfl.equals(ds.dfl), (gcm_dfl, ds.dfl)
    gcm_dfldz = gcm.derivative_zl_to_z(ds.fl, fill_value)
    assert gcm_dfldz.equals(ds.dfldz), (gcm_dfldz, ds.dfldz)
    gcm_dg = gcm.diff_z_to_zp1(ds.g)
    assert gcm_dg.equals(dsdg), (gcm_dg, dsdg)
    gcm_dgdf = gcm.derivative_z_to_zp1(ds.g)
    assert gcm_dgdf.equals(dsdgdf), (gcm_dgdf, dsdgdf)
Пример #3
0
def test_vertical_derivatives(test_dataset):
    ds = test_dataset
    H = ds.attrs['H']
    dz = ds.attrs['dz']

    # vertical function of z at cell interface
    f = np.sin(np.pi * ds.Zp1.values / H)
    ds['f'] = (('Zp1'), f)
    ds['fl'] = ('Zl', f[:-1])
    # TODO: build in negative sign logic more carefully
    df = -np.diff(f)
    ds['df'] = ('Z', df)
    fill_value = 0.
    ds['dfl'] = ('Z', np.hstack([df[:-1], f[-2] - fill_value]))
    ds['dfdz'] = ds['df'] / dz
    ds['dfldz'] = ds['dfl'] / dz

    # vertical function at cell center
    g = np.sin(np.pi * ds.Z.values / H)
    ds['g'] = ('Z', g)
    dg = -np.diff(g)
    dsdg = DataArray(dg, {'Zp1': ds.Zp1[1:-1]}, 'Zp1')
    dsdgdf = dsdg / dz

    gcm = GCMDataset(ds)
    gcm_df = gcm.diff_zp1_to_z(ds.f)
    assert gcm_df.equals(ds.df), (gcm_df, ds.df)
    gcm_dfdz = gcm.derivative_zp1_to_z(ds.f)
    assert gcm_dfdz.equals(ds.dfdz), (gcm_dfdz, ds.dfdz)
    gcm_dfl = gcm.diff_zl_to_z(ds.fl, fill_value)
    assert gcm_dfl.equals(ds.dfl), (gcm_dfl, ds.dfl)
    gcm_dfldz = gcm.derivative_zl_to_z(ds.fl, fill_value)
    assert gcm_dfldz.equals(ds.dfldz), (gcm_dfldz, ds.dfldz)
    gcm_dg = gcm.diff_z_to_zp1(ds.g)
    assert gcm_dg.equals(dsdg), (gcm_dg, dsdg)
    gcm_dgdf = gcm.derivative_z_to_zp1(ds.g)
    assert gcm_dgdf.equals(dsdgdf), (gcm_dgdf, dsdgdf)