*** NOTES ***
- Ferret v6.95 is required for LAS V8.4
- There's an unresolved graphics issue: When displaying Ferret graphics on a RHEL6 machine, and using the RHEL6 XWindows display (updated since summer of 2015), using a mouse to drag the corners of the window and resize it does not work. This appears to be due to an interaction between the graphics calls in GKS, and the XWindows version under RHEL6. Resizing windows using the SET WINDOW /SIZE= works correctly. Displaying on other systems works fine, even when running Ferret on RHEL6. None of this applies to PyFerret.
New Features/Enhancements:
1. New Auxiliary Coordinate Regridding methods and syntax extend Ferret's regridding capabilities to "logically rectangular" grids, such as layered depths, forecast model run collections, and (not yet implemented) curvilinear horizontal grids.
yes? SHADE temp[gz(density)=DensityAxis]
2. New definition of forecast aggregations on the fly in a Ferret session with DEFINE DATA/AGGREGATE/F
3. There is new functionality for defining and working with Forecast model run collections (FMRC):
An FMRC dataset may be defined on the fly by Ferret, or by an aggregation in the THREDDS Data Server (TDS) from Unidata. These FMRC datasets describe time with both model time (timesteps within each model run) and forecast time (the collection of all forecasts). New methods are defined for working with these datasets.
4. The new ANNOTATE command places labels on the the plot page. It's similar to the LABEL command, but with the convenience of command qualifiers and several useful new controls. See the documentation for full details and examples.
5. For line plots with multiple lines, there is a new option PLOT/KEY=TITLE to control the labels on the line legend at the bottom of the plot. In addition a new FAQ discusses options for customizing the legend for a plot showing multiple 1-D lines.
6. A new option for immediate-mode expressions, `var,RETURN=defined` tells whether there is a user-defined variable by that name. It returns 0 or 1. It does not look for file variables. (Recall that `RETURN=isready` is available for all variables.)
7. A new qualifier /NOERROR on the CANCEL command allows the CANCEL operation to proceed whether the item is defined or not. A dataset may be canceled whether they are open or not. A variable that may or may not be defined, may be canceled without any error messages. Otherwise canceling something that's undefined returns a Ferret error.
8. The FLOATSTR function now accepts Integer-format specifications for converting numeric data to strings.
9. There is a small behavior change when working with strings:
Previous to this version, Ferret returned missing-data if strings were in expressions with numeric operators other than + (i.e. *, /) , or numeric functions (COS, MAX, ...). These now return an error message instead. This is related to the fix for item 2 in the list of bug fixes, below.
OLD:
yes? list/nohead "b" / {"a","b"}
1 / 1:....
2 / 2:....
yes? list/nohead MAX("a",{"a","b","c"})
1 / 1:....
2 / 2:....
3 / 3:....
NEW: These expressions will return:
**ERROR: invalid command: cannot use strings in numerical expression
Exception: the + operator concatenates string variables with the same or conformable shapes. This behavior is unchanged.
10. For plots with a longitude axis and a wide range of longitudes, the tic interval is now based on 15-degree delta longitude rather than 10 degrees. This makes it easier to locate the dateline in the middle of the Pacific, for instance.
11. There is a a change to Ferret's behavior when writing data from some netCDF datasets. If a netCDF dataset has dimensions which are not also coordinate variables, Ferret defines an abstract axis with indices 1, 2, ..., ndim to use in the grids which contain such a dimension. When Ferret writes data on such a grid to NetCDF output, previously it wrote out this coordinate axis as a coordinate variable; now it writes just the dimension so that the file has the same form as the input dataset. This lets us handle datasets with 2-dimensioned time variables, for instance from an FMRC dataset:
> ncdump -h "http://server.address/thredds/dodsC/models/modelname_fmrc.ncd"
netcdf local_forecast_time {
dimensions:
TIME = 65 ;
RUN = 124 ;
LON = 720 ;
LAT = 361 ;
variables:
double RUN(RUN) ;
RUN:long_name = "Run time for ForecastModelRunCollection" ;
RUN:units = "hours since 2011-05-06t00:00:00z" ;
double TIME(RUN, TIME) ;
TIME:long_name = "Forecast time for ForecastModelRunCollection" ;
TIME:units = "hours since 2011-05-06T00:00:00Z" ;
double RH2M(RUN, TIME, LAT, LON) ;
RH2M:_FillValue = -999000000. ;
RH2M:units = "%" ;
RH2M:long_name = "relative humidity at 2m" ;
RH2M.coordinates = run time latitude longitude
...
> ferret
yes? use "http://server.address/thredds/dodsC/models/modelname_fmrc.ncd"
! previously this returned an error: writing a 1D coordinate variable and
! the 2-D variable both named TIME.
yes? save/file=mytime.nc time
12. The SHOW VARIABLE/TREE command now reports dependencies that arise from regridding operations.
In addition, the formatting of the output of SHOW VARIABLE/TREE has been changed slightly to make it easier to automatically parse the output.
13. A new function is added. Used to generate labels for discrete data such as collections of profiles, stations, or time series, LON_LAT_TIME_STRING returns strings containing the time and location information:
yes? let mylabel = LON_LAT_TIME_STRING (lon, lat, times, timevar, "station")
yes? say `mylabel`
station_188E_15N_03-JAN-2011
Bug fixes:
1. The @STD transformation, which was new with V6.90, is documented as "applied simultaneously to multiple axes the calculation is performed as the variance of a block of data rather than as nested 1-dimensional variances." This multi-dimensional computation was not in fact done. This is remedied, so the calculation on a range of data in multiple directions is now correctly done on the block of data.
2. Fixes are made to the command flow-control for block IF-THEN commands. When the condition of a IF or ELIF block is FALSE, so the block is not being executed, the processing of commands has been made robust so that scripts execute correctly regardless of the commands inside the IF block. (Previously REPEAT loops or other IF blocks inside a block IF were problematic.) These changes also mean that:
-
Superfluous "ELSE" and "ENDIF" reports when skipping an "IF 0" condition will no longer show up as Ferret executes.
-
"!->" outputs no longer echo the bang comments from the original command line So in the Ferret output, previously the comment was echoed when the command was parsed. Now, if a script has a comment, it will not be echoed:
list/y=1:15 rose[x=@$1] ! output will be a 1-D line
!-> list/y=1:15 rose[x=@ave] -
leading "yes?" and "...?" are no longer echoed to the Ferret output. i.e. if the script has yes? or ...? (from a continuation command) leading the lines, those are stripped off before the commands are echoed to output.
In addition, a warning is now issued if a script exits with an unclosed IF block. Ferret has always closed such a block as if there were an ENDIF; now it will say:
*** NOTE: Unclosed IF statement ... assuming ENDIF
2. A bug is fixed when a logical expression returns one of two strings. Previously the result of these commands was not a correct string. This is fixed.
yes? let a = 1./0
yes? let ok = if a then "yes" else "no"
yes? list ok
VARIABLE : IF A THEN "yes" ELSE "no"
"no"
4. Bugs related to using attribute values as arguments to functions are fixed. For example this syntax previously caused Ferret to exit on evaluating the result of the function:
yes? let is_meters = IS_ELEMENT_OF_STR(a.units,{"m", "meters", "metres"})
yes? IF `is_meters` then let akm = a/1000
5. When a file contains a variable name that is illegal in Ferret, or if there are two variable names in a file which differ only in their upper- and lower-case spelling, we put the name in single quotes to refer to it in Ferret command lines. Previously if there was not a duplicate variable name, the list of file variables was searched using only uppercase. So if a file variable is "abc", Ferret would report that
yes? list 'abc'
**ERROR: variable unknown or not in data set: 'abc'
! but this would have returned the variable:
yes? list 'ABC'
This is fixed. Now the search is done by first attempting to match the case given on the command line, and then in a case-insensitive way.
6. When multiple variables are LISTed, and one or more variables have all missing values, previously the .... representing the missing data ran together. This is fixed. A listing that used to look like this:
yes? list v1,v2,v3,v4
...
V1 V2 V3 V4
1 / 1: 1.000...... 4.000
2 / 2: 2.000...... 5.000
3 / 3: 3.000...... 6.000
Now looks like this:
V1 V2 V3 V2
1 / 1: 1.000 .... .... 4.000
2 / 2: 2.000 .... .... 5.000
3 / 3: 3.000 .... .... 6.000
7. Extra-long global attributes can now be written to files. Previously the length was limited to 2048 characters.
yes? show data/attributes
yes? set att/output . ! All the global attributes from the source file will be written.
yes? save/file=out.nc var
8. A bug in the function PT_IN_POLY is fixed. Previously the xvert locations listed in argument 2 had to lie on the same modulo longitude branch as the native XY grid of argument 1. Now modulo operations are done when evaluating the result. In addition, previously if we passed a subset of the argument 1 was specified; e.g.
let var = PT_IN_POLY(var[x=60:90,y=15:35], xvert, yvert)
the function did not return the correct result. This is fixed.
9. If a line plot is drawn so that a PLOT, or PLOT/VS, or PLOT/RIBBON line lies directly on a coordinate axis, the axis was overlaid by the plotted line and disappeared from the plot. This is fixed so that the coordinate axis lines are always visible.
10. If variables in a dataset are "packed", that is they have scale_factor and/or add_offset attributes, they are unpacked upon reading into Ferret, and re-packed if written unchanged to an output netCDF file. If multiple variables are SAVEd to an output file, and they have different scale factors, or some have scale factors and others do not, the re-packing was done incorrectly. This is fixed.
11. If files with long dataset names are open, then "SHOW DATA myfilename" returned no result, or potentially an incorrect result. The name requested e.g. myfilename, was truncated to 32 characters when searching the list of names of open datasets. This is fixed.