def test_div_xy(self): f = cf.example_field(0) # Spherical polar coordinates theta = 90 - f.convert("Y", full_domain=True) sin_theta = theta.sin() radius = 2 r = f.radius(radius) for wrap in (False, True, None): for one_sided in (False, True): x, y = f.grad_xy( radius=radius, x_wrap=wrap, one_sided_at_boundary=one_sided, ) d = cf.div_xy( x, y, radius=radius, x_wrap=wrap, one_sided_at_boundary=one_sided, ) self.assertTrue(d.Units == cf.Units("m-2 rad-2"), d.Units) term1 = x.derivative( "X", wrap=wrap, one_sided_at_boundary=one_sided ) term2 = (y * sin_theta).derivative( "Y", one_sided_at_boundary=one_sided ) d0 = (term1 + term2) / (sin_theta * r) # Check the data with cf.rtol(1e-10): self.assertTrue((d.data == d0.data).all()) del d.long_name d0.set_data(d.data) self.assertTrue(d.equals(d0)) # Cartesian coordinates dim_x = f.dimension_coordinate("X") dim_y = f.dimension_coordinate("Y") dim_x.override_units("m", inplace=True) dim_y.override_units("m", inplace=True) dim_x.standard_name = "projection_x_coordinate" dim_y.standard_name = "projection_y_coordinate" f.cyclic("X", iscyclic=False) for wrap in (False, True, None): for one_sided in (True, False): x, y = f.grad_xy(x_wrap=wrap, one_sided_at_boundary=one_sided) d = cf.div_xy( x, y, x_wrap=wrap, one_sided_at_boundary=one_sided ) self.assertTrue(d.Units == cf.Units("m-2")) term1 = x.derivative( "X", wrap=wrap, one_sided_at_boundary=one_sided ) term2 = y.derivative("Y", one_sided_at_boundary=one_sided) d0 = term1 + term2 del d.long_name del d0.long_name self.assertTrue(d.equals(d0, rtol=1e-10))
u.data[0, 0, 0] = -1e30 u.data[0, 0, 0] t.data[0, 0, 0] u.del_construct('grid_latitude') u.constructs('grid_latitude') t.constructs('grid_latitude') import copy u = copy.deepcopy(t) orog = t.constructs('surface_altitude').value().copy() t.equals(t) t.equals(t.copy()) t.equals(t[...]) t.equals(q) t.equals(q, verbose=2) print(cf.atol()) print(cf.rtol()) original = cf.rtol(0.00001) print(cf.rtol()) print(cf.rtol(original)) print(cf.rtol()) t2 = t - 0.00001 t.equals(t2) with cf.atol(1e-5): print(t.equals(t2)) t.equals(t2) orog = t.constructs('surface_altitude').value() orog.equals(orog.copy()) print(t.constructs.filter_by_ncvar('b')) t.constructs('ncvar%x').value() t.constructs('ncdim%x') q.nc_get_variable()
u.constructs('grid_latitude') t.constructs('grid_latitude') import copy u = copy.deepcopy(t) orog = t.constructs('surface_altitude').value().copy() print("\n**Equality**\n") t.equals(t) t.equals(t.copy()) t.equals(t[...]) t.equals(q) t.equals(q, verbose=2) cf.atol() cf.rtol() original = cf.rtol(0.00001) cf.rtol() cf.rtol(original) cf.rtol() orog = t.constructs('surface_altitude').value() orog.equals(orog.copy()) print("\n**NetCDF interface**\n") print(t.constructs.filter_by_ncvar('b')) t.constructs('ncvar%x').value() t.constructs('ncdim%x') q.nc_get_variable() q.nc_global_attributes() q.nc_set_variable('humidity')