@@ -22,6 +22,7 @@ On load, any fill-value or missing data value defined in the loaded dataset
2222should be used as the ``fill_value `` of the NumPy masked array data attribute of the
2323:class: `~iris.cube.Cube `. This will only appear when the cube's data is realised.
2424
25+ .. _missing_data_saving :
2526
2627Saving
2728------
@@ -37,7 +38,8 @@ For example::
3738.. note ::
3839 Not all savers accept the ``fill_value `` keyword argument.
3940
40- Iris will check for and issue warnings of fill-value 'collisions'.
41+ Iris will check for and issue warnings of fill-value 'collisions' (exception:
42+ **NetCDF **, see the heading below).
4143This basically means that whenever there are unmasked values that would read back
4244as masked, we issue a warning and suggest a workaround.
4345
@@ -51,6 +53,8 @@ This will occur in the following cases:
5153NetCDF
5254~~~~~~
5355
56+ :term: `NetCDF Format `
57+
5458NetCDF is a special case, because all ordinary variable data is "potentially masked",
5559owing to the use of default fill values. The default fill-value used depends on the type
5660of the variable data.
@@ -64,6 +68,16 @@ The exceptions to this are:
6468* Small integers create problems by *not * having the exemption applied to byte data.
6569 Thus, in principle, ``int32 `` data cannot use the full range of 2**16 valid values.
6670
71+ Warnings are not issued for NetCDF fill value collisions. Increasingly large
72+ and complex parallel I/O operations unfortunately made this feature
73+ un-maintainable and it was retired in Iris 3.9 (:pull: `5833 `).
74+
75+ If you need to know about collisions then you can perform your own checks ahead
76+ of saving. Such operations be run lazily (:term: `Lazy Data `). Here is an
77+ example::
78+
79+ >>> default_fill = netCDF4.default_fillvals[my_cube.dtype.str[1:]]
80+ >>> fill_present = (my_cube.lazy_data() == default_fill).any().compute()
6781
6882Merging
6983-------
0 commit comments