def test_speed(): # run speed in xroms xvar = xroms.speed(ds.u, ds.v, grid) # calculate own version of speed var = np.sqrt(u ** 2 + v ** 2) # these aren't identical because of grid shifting assert np.allclose(xvar.mean(), var.mean(), rtol=1e-2)
def test_speed(): acc = ds.xroms.speed assert np.allclose(acc, xroms.speed(ds.u, ds.v, grid)) # also check attributes acc.name == acc.attrs["name"] acc.attrs["grid"] == ds.xroms.grid # cf-xarray: make sure all Axes and Coordinates available in output items = ["T", "X", "Y", "Z", "longitude", "latitude", "vertical", "time"] assert set(items).issubset(acc.cf.get_valid_keys())
def test_KE(): rho = xroms.density(temp, salt, z_rho)[:, np.newaxis, np.newaxis] s2 = (u ** 2 + v ** 2)[np.newaxis, :, :] KE = 0.5 * rho * s2 # xroms s = xroms.speed(ds.u, ds.v, grid) assert np.allclose( xroms.to_grid(xroms.KE(ds.rho0, s), grid, hcoord="psi").mean(), KE.mean(), rtol=1e-2, )
def speed(self): """Calculate horizontal speed [m/s] from u and v components, on rho/rho grids. Notes ----- speed = np.sqrt(u^2 + v^2) Uses 'extend' for horizontal boundary. See `xroms.speed` for full docstring. Example usage ------------- >>> ds.xroms.speed """ if "speed" not in self.ds: var = xroms.speed(self.ds.u, self.ds.v, self.grid, hboundary="extend") self.ds["speed"] = var return self.ds.speed