v1.8 (14 Apr 2015)#
This document explains the changes made to Iris for this release (View all changes.)
Features#
Showcase: Rotate winds
Iris can now rotate and unrotate wind vector data by transforming the wind vector data to another coordinate system.
For example:
>>> from iris.analysis.cartography import rotate_winds
>>> u_cube = iris.load_cube('my_rotated_u_wind_cube.pp')
>>> v_cube = iris.load_cube('my_rotated_v_wind_cube.pp')
>>> target_cs = iris.coord_systems.GeogCS(6371229.0)
>>> u_prime, v_prime = rotate_winds(u_cube, v_cube, target_cs)
Showcase: Nearest-neighbour scheme
A nearest-neighbour scheme for interpolation and regridding has been added
to Iris. This joins the existing Linear
and
AreaWeighted
interpolation and regridding schemes.
For example:
>>> result = cube.interpolate(sample_points, iris.analysis.Nearest())
>>> regridded_cube = cube.regrid(target_grid, iris.analysis.Nearest())
Showcase: Slices over a coordinate
You can slice over one or more dimensions of a cube using
iris.cube.Cube.slices_over()
.
This provides similar functionality to slices()
but with almost the opposite outcome.
Using slices()
to slice a cube on a selected
dimension returns all possible slices of the cube with the selected
dimension retaining its dimensionality. Using
slices_over()
to slice a cube on a selected
dimension returns all possible slices of the cube over the selected
dimension.
To demonstrate this:
>>> cube = iris.load(iris.sample_data_path('colpex.pp'))[0]
>>> print(cube.summary(shorten=True))
air_potential_temperature / (K) (time: 6; model_level_number: 10; grid_latitude: 83; grid_longitude: 83)
>>> my_slice = next(cube.slices('time'))
>>> my_slice_over = next(cube.slices_over('time'))
>>> print(my_slice.summary(shorten=True))
air_potential_temperature / (K) (time: 6)
>>> print(my_slice_over.summary(shorten=True))
air_potential_temperature / (K) (model_level_number: 10; grid_latitude: 83; grid_longitude: 83)
iris.cube.CubeList.concatenate()
now works with biggus arrays and so now supports concatenation of cubes with deferred data.Improvements to NetCDF saving through using biggus:
A cube’s lazy data payload will still be lazy after saving; the data will not be loaded into memory by the save operation.
Cubes with data payloads larger than system memory can now be saved to NetCDF through biggus streaming the data to disk.
iris.util.demote_dim_coord_to_aux_coord()
andiris.util.promote_aux_coord_to_dim_coord()
allow a coordinate to be easily demoted or promoted within a cube.iris.util.squeeze()
removes all length 1 dimensions from a cube, and demotes any associated squeeze dimensionDimCoord
to be a scalar coordinate.iris.cube.Cube.slices_over()
, which returns an iterator of all sub-cubes along a given coordinate or dimension index.iris.cube.Cube.interpolate()
now accepts datetime.datetime and netcdftime.datetime instances for date or time coordinates.Many new and updated translations between CF spec and STASH codes or GRIB2 parameter codes.
PP/FF loader creates a height coordinate at 1.5m or 10m for certain relevant stash codes.
Lazy aggregator support for the
standard deviation
aggregator has been added.A speed improvement in calculation of
iris.analysis.cartography.area_weights()
.Experimental support for unstructured grids has been added with
iris.experimental.ugrid()
. This has been implemented using UGRID.iris.cube.CubeList.extract_overlapping()
supports extraction of cubes over regions where common coordinates overlap, over multiple coordinates.Warnings raised due to invalid units in loaded data have been suppressed.
Experimental low-level read and write access for FieldsFile variants is now supported via
iris.experimental.um.FieldsFileVariant
.PP loader will return cubes for all fields prior to a field with a problematic header before raising an exception.
NetCDF loader skips invalid global attributes, raising a warning rather than raising an exception.
A warning is now raised rather than an exception when constructing an
AuxCoordFactory
fails.Supported
aux coordinate factories
have been extended to include:
ocean sigma coordinate
,
ocean s coordinate
,
ocean s coordinate, generic form 1
, and
ocean s coordinate, generic form 2
.
iris.cube.Cube.intersection()
now supports taking a points-only intersection. Any bounds on intersected coordinates are ignored but retained.The FF loader’s known handled grids now includes
Grid 21
.A
nearest neighbour
scheme is now provided foriris.cube.Cube.interpolate()
andiris.cube.Cube.regrid()
.iris.analysis.cartography.rotate_winds()
supports transformation of wind vectors to a different coordinate system.NumPy universal functions can now be applied to cubes using
iris.analysis.maths.apply_ufunc()
.Generic functions can be applied to
Cube
instances usingiris.analysis.maths.IFunc
.The
iris.analysis.Linear
scheme now supports regridding as well as interpolation. This enablesiris.cube.Cube.regrid()
to perform bilinear regridding, which now replaces the experimental routine “iris.experimental.regrid.regrid_bilinear_rectilinear_src_and_grid”.
Bugs Fixed#
Fix in netCDF loader to correctly determine whether the longitude coordinate (including scalar coordinates) is circular.
iris.cube.Cube.intersection()
now supports bounds that extend slightly beyond 360 degrees.Lateral Boundary Condition (LBC) type FieldFiles are now handled correctly by the FF loader.
Making a copy of a scalar cube with no data now correctly copies the data array.
Height coordinates in NAME trajectory output files have been changed to match other NAME output file formats.
Fixed datatype when loading an
integer_constants
array from a FieldsFile.FF/PP loader adds appropriate cell methods for
lbtim.ib = 3
intervals.An exception is raised if the units of the latitude and longitude coordinates of the cube passed into
iris.analysis.cartography.area_weights()
are not convertible to radians.GRIB1 loader now creates a time coordinate for a time range indicator of 2.
NetCDF loader now loads units that are empty strings as dimensionless.
v1.8.1 (03 Jun 2015)#
The PP loader now carefully handles floating point errors in date time conversions to hours.
The handling fill values for lazy data loaded from NetCDF files is altered, such that the _FillValue set in the file is preserved through lazy operations.
The risk that cube intersections could return incorrect results due to floating point tolerances is reduced.
The new GRIB2 loading code is altered to enable the loading of various data representation templates; the data value unpacking is handled by the GRIB API.
Saving cube collections to NetCDF, where multiple similar aux-factories exist within the cubes, is now carefully handled such that extra file variables are created where required in some cases.
Deprecations#
The original GRIB loader has been deprecated and replaced with a new template-based GRIB loader.
Deprecated default NetCDF save behaviour of assigning the outermost dimension to be unlimited. Switch to the new behaviour with no auto assignment by setting
iris.FUTURE.netcdf_no_unlimited
to True.The former experimental method “iris.experimental.regrid.regrid_bilinear_rectilinear_src_and_grid” has been removed, as
iris.analysis.Linear
now includes this functionality.
Documentation#
A chapter on merge and concatenate has been added to the user guide.
A section on installing Iris using conda has been added to the install guide.
Updates to the chapter on regridding and interpolation have been added to the user guide.