Beispiel #1
0
def test_density(fieldset, mode, area_scale):
    lons, lats = np.meshgrid(np.linspace(0.05, 0.95, 10), np.linspace(-30, 30, 20))
    pset = ParticleSet(fieldset, pclass=ptype[mode], lon=lons, lat=lats)
    arr = pset.density(area_scale=area_scale)
    if area_scale:
        assert np.allclose(arr, 1 / fieldset.U.cell_areas(), rtol=1e-3)  # check that density equals 1/area
    else:
        assert(np.sum(arr) == lons.size)  # check conservation of particles
        inds = np.where(arr)
        for i in range(len(inds[0])):  # check locations (low atol because of coarse grid)
            assert np.allclose(fieldset.U.lon[inds[1][i]], pset[i].lon, atol=fieldset.U.lon[1]-fieldset.U.lon[0])
            assert np.allclose(fieldset.U.lat[inds[0][i]], pset[i].lat, atol=fieldset.U.lat[1]-fieldset.U.lat[0])
Beispiel #2
0
def test_density(grid, mode, npart=10):
    pset = ParticleSet(grid,
                       pclass=ptype[mode],
                       lon=np.linspace(0, 1, npart, dtype=np.float32),
                       lat=0.5 * np.ones(npart, dtype=np.float32))
    arr = pset.density(area_scale=False)
    assert (np.sum(arr) == npart)  # check conservation of particles
    inds = zip(*np.where(arr))
    for i in range(
            len(inds)):  # check locations (low rtol because of coarse grid)
        assert np.allclose(grid.U.lon[inds[i][0]], pset[i].lon, rtol=1e-1)
        assert np.allclose(grid.U.lat[inds[i][1]], pset[i].lat, rtol=1e-1)
Beispiel #3
0
def test_density(fieldset, mode):
    lons, lats = np.meshgrid(fieldset.U.lon[0], fieldset.U.lat)
    pset = ParticleSet(fieldset, pclass=ptype[mode], lon=lons, lat=lats)
    arr = pset.density(area_scale=False)  # Not scaling by area
    assert (np.sum(arr) == fieldset.U.lat.size
            )  # check conservation of particles
    inds = zip(*np.where(arr))
    for i in range(
            len(inds)):  # check locations (low rtol because of coarse grid)
        assert np.allclose(fieldset.U.lon[inds[i][0]], pset[i].lon, rtol=1e-1)
        assert np.allclose(fieldset.U.lat[inds[i][1]], pset[i].lat, rtol=1e-1)
    arr = pset.density(area_scale=True)  # Scaling by area
    area = np.zeros(np.shape(fieldset.U.data[0, :, 0]), dtype=np.float32)
    U = fieldset.U
    V = fieldset.V
    dy = (V.lon[1] - V.lon[0]) / V.units.to_target(1, V.lon[0], V.lat[0],
                                                   V.depth[0])
    for y in range(len(U.lat)):
        dx = (U.lon[1] - U.lon[0]) / U.units.to_target(1, U.lon[0], U.lat[y],
                                                       V.depth[0])
        area[y] = dy * dx
    assert ((arr[0, :] -
             (1 / area)) == 0).all()  # check that density equals 1/area