Пример #1
0
def test_obs_ncobsplatform_hfradars_plot():

    # Load platform
    obs = NcObsPlatform(NCFILE_OBS_HFRADARS, name='hfradars')

    # Bathymetry
    bathy = get_bathy()

    # Plots
    figs = obs.plot(variables=['locations', 'u'],
                    full3d=False,
                    full2d=True,
                    size=30,
                    bathy=bathy,
                    map_margin=0.05)

    return figs
Пример #2
0
def test_obs_ncobsplatform_profiles_plot():

    # Load platform
    obs = NcObsPlatform(NCFILE_OBS_PROFILES, name='profiles')

    # Bathymetry
    bathy = get_bathy()

    # Plots
    figs = obs.plot(variables=['locations', 'temp'],
                    full3d=True,
                    full2d=True,
                    size=40,
                    bathy=bathy,
                    map_margin=0.05,
                    surf=True,
                    zonal_sections=[47.4],
                    lat_interval_width=0.35)

    return figs
Пример #3
0
def test_arm_arm_init():

    # Load ensemble
    ens = Ensemble.from_file(ENS_NCFILE, checkvars=True, logger=LOGGER)

    # Load observations
    obs0 = NcObsPlatform(NCFILE_OBS_HFRADARS)
    obs1 = NcObsPlatform(NCFILE_OBS_PROFILES)
    obs2 = NcObsPlatform(NCFILE_OBS_SATSST)
    obsmanager = ObsManager([obs0, obs1, obs2])

    # Bathymetry
    bathy = get_bathy()[::2, ::2]

    # Init ARM
    arm = ARM(ens, obsmanager, syncnorms=True, bathy=bathy)

    # Checks
    assert_allclose(arm.obsmanager[2].norms + arm.obsmanager[1].norms[:1],
                    arm.ens.norms[arm.ens.varnames.index('temp')])

    return arm
Пример #4
0
def test_obs_obsmanager_init_surf():

    # Load and stack surface obs
    obs_surf0 = NcObsPlatform(NCFILE_OBS_SURF,
                              lon=(-7, -5),
                              varnames=['temp'],
                              norms=0.2,
                              name='surf_west')
    obs_surf1 = NcObsPlatform(NCFILE_OBS_SURF,
                              lon=(-5, 0),
                              varnames=['temp', 'sal'],
                              norms=[0.2, 0.1],
                              name='surf_east')

    # Setup manager
    manager = ObsManager([obs_surf0, obs_surf1])

    # Checks
    stacked = manager.stacked_data
    assert_allclose(stacked, [1., 2.5, 1.5, 4., 1.5, 4.])
    assert_allclose(manager.lons, [-5.8, -5.7, -4.6, -2.8])
    assert_allclose(manager.lats, [48.1, 47.5, 47.4, 47.3])
    assert manager.varnames == ['temp', 'sal']
    model_specs = manager.get_model_specs()
    assert sorted(model_specs.keys()) == ['depths', 'lat', 'lon', 'varnames']
    assert model_specs['varnames'] == ['temp', 'sal']
    assert model_specs['depths']['temp'] == ('surf', )
    assert_allclose(model_specs['lat'][:2], (47.3, 48.1))
    assert_allclose(model_specs['lon'][:2], (-5.8, -2.8))

    # Renorm by name
    manager.set_named_norms(temp=0.1)
    assert manager.stacked_data[0] == 2 * stacked[0]

    CACHE['manager_surf'] = manager
    return manager
Пример #5
0
def test_obs_ncobsplatform_surf():

    # Load and stack obs
    obs = NcObsPlatform(NCFILE_OBS_SURF,
                        logger=LOGGER,
                        lat=(45, 47.8),
                        norms=[0.2, 0.1])
    stacked = obs.stacked_data.copy()
    assert obs.lons.shape == (3, )
    assert obs.ns == 6
    assert obs.ndim == 1
    assert_allclose(obs.means, [0, 0], atol=1e-7)
    assert obs.depths == 'surf'
    assert_allclose(stacked, [2.5, 1.5, 4., 1., 1.5, 4.])

    # Named norms
    notnormed = obs.set_named_norms(temp=0.1)
    assert obs.norms == [0.1, 0.1]
    assert_allclose(obs.stacked_data[:3], 2 * stacked[:3])
    assert_allclose(obs.stacked_data[3:], stacked[3:])
    obs.set_named_norms(temp=0.2)

    # Interpolate model
    f = DS(NCFILE_MANGA0, 'mars', level=obs.depths, logger_level='error')
    temp = f('temp')
    sal = f('sal')
    f.close()
    temp.id += '_surf'
    sal.id += '_surf'
    otemp = obs.project_model(temp)
    osal = obs.project_model(sal)
    otem_true = [12.97311556, 12.91558515, 10.58179214]
    assert_allclose(otemp[0], otem_true)

    # Stack model
    otemp[:] -= 11.5
    osal[:] -= 35.5
    stacked_data = obs.restack([otemp, osal])
    assert stacked_data.shape == (6, 15)
    assert_allclose(stacked_data[:3, 0] * obs.norms[0] + 11.5, otem_true)

    return obs
Пример #6
0
def test_obs_ncobsplatform_surf_gridded():

    # Load and stack obs
    obs = NcObsPlatform(NCFILE_OBS_HFRADARS)
    stacked = obs.stacked_data.copy()
    assert stacked.ndim == 1
Пример #7
0
def test_obs_ncobsplatform_xylocsa():

    # Load platform
    obs = NcObsPlatform(NCFILE_OBS_PROFILES, name='profiles')

    # Orig
    lons_orig = obs.lons.copy()
    lats_orig = obs.lats.copy()

    # Init output
    saout = obs.xylocsa_init_pert_output()
    assert saout.shape == (4, len(lons_orig))

    # Loop on indices
    for i in obs.xylocsa_get_pert_indices_iter():

        # X
        # - activate
        obs.xylocsa_activate_pert('+x', i)
        assert abs(obs.lons - lons_orig).ptp() > 0.0001
        # - deactivate
        obs.xylocsa_deactivate_pert()
        assert_allclose(obs.lons, lons_orig)

        # Y
        # - activate
        obs.xylocsa_activate_pert('+y', i)
        assert abs(obs.lats - lats_orig).ptp() > 0.0001
        # - deactivate
        obs.xylocsa_deactivate_pert()
        assert_allclose(obs.lats, lats_orig)

    return