New Features/Enhancements/Bug Fixes in Ferret v6.93
1) The /KEY qualifier on the SHADE, FILL, and RIBBON commands customizes the colorbar. There are two new keywords for the /KEY qualifier: /KEY=HORIZONTAL,CENTERLAB (in addition to KEY=CONTINUOUS).
- /KEY=HORIZONTAL to draw a horizontal colorbar immediately above the plot
- /KEY=CENTERLAB puts the colorbar labels between the lines of a color key. By default the the lines between colors are labeled. This style is particularly useful when the colors represent discrete quantities: version number, vegetation code, etc.
yes? shade/lev=v/key=horiz var
yes? shade/lev=(1,5,1)/palette=ten_by_levels/key=centerlab index_variable
2) New transform @WGT returns the weights that would be used when doing an averaging or integral on the grid. The results are expressed in the same standard units as integrals: Meters on the surface of the earth and seconds in time.
3) New functions are included for working with collections of trajectories and collections of profiles. A new documentation section introduces these functions and shows examples of working with CF Discrete Geometries datasets.
4) Previously when reading ascii or unformatted files (EZ datasets), if a grid is not defined with the FILE/GRID qualifier, Ferret used the "ABSTRACT" axis, with 20480 index values. This resulted in incorrect interpretation of the file if it has more records than that. In addition, commands such as "show grid" were not useful to see the true size of the dataset. Now, if there is no grid given by the Ferret commands, Ferret determines the size of the file and defines an axis and grid on which to read the variables. It takes any /skip and /columns qualifiers into account. If a grid is specified there is no change to the behavior.
yes? file/skip=3/var="nn,freq" frequency_h.dat
yes? say `freq,return=isize`
!-> MESSAGE/CONTINUE 426
426
yes? show grid freq
GRID (G001)
name axis # pts start end
(AX002) X 426 r 1 426
normal Y
...
5) NetCDF files that Ferret writes now have the global attribute
:Conventions = "CF-1.6" ;
The conventions are not implemented in their entirety but Ferret output is consistent with CF 1.6.
6) When appending to a file, the behavior for global attributes history and Conventions is as follows:
Ferret replaces a history attribute which is simply a Ferret version number and date, with the version number of the Ferret executable writing to the file, and the current date. If there are other contents to the history attribute, Ferret appends a comma and newline character, then the Ferret version number and date.
Ferret replaces a Conventions attribute which is simply CF-x.x with the current conventions information, now CF-1.6. If there are other contents of the Conventions attribute, Ferret will append a comma and the current CF conventions number.
7) Previously every time Ferret wrote data to a netCDF file, it insisted that there be a coordinate axis including coordinate variables for all grids. Now, when appending variables to a dataset in which grids consist of dimensions with no corresponding coordinate variable, Ferret will write the new variable without insisting on a coordinate variable. This lets us append to a Discrete Geometries dataset or other datasets which do not have coordinate variables. (see chapter 9 of the CF conventions, http://cfconventions.org)
8) SHOW FUNCTION/DETAILS lists the data type of each argument. Previously only STRING argument types were labeled.
9) If an incorrect data type is sent to a function, the error message lists which argument had the incorrect type.
list tax_datestring (tt[L=3], tt, 5)
**ERROR: invalid command: string/numeric data type mix-up. Argument 3 : TAX_DATESTRING
10) Several users have requested the older versions of the EOF functions which return results even when the data has gaps in the time series. It is still recommended that you use one of Ferret's filling transformations to fill the gaps and then compute the EOF results using the EOFSVD functions. However if you want the functions which work on gappy data, they may be found via the links below. The functions are distributed as shared-object external functions and may be used by saving them to a directory which is included in your FER_EXTERNAL_FUNCTIONS environment variable. The functions are named EOF_SPACE_TGAP, EOF_STAT_TGAP, EOF_TFUNC_TGAP. Their arguments and returns are the same as for EOF_SPACE, etc:
yes? show func eof_space_tgap
EOF_SPACE_TGAP(A,frac_timeser)
Compute EOF spacial fields from XYT field with gappy time series
A: Variable in x,y,t; may be fcn of z,e,f
frac_timeser: Use only those time series with this fraction valid data
yes? show func eof_stat_tgap
EOF_STAT_TGAP(A,frac_timeser)
EOF statistics from XYT field (gappy time series). j=1:#EOFs, j=2:%variation, j=3:eigenvalues
A: Variable in x,y,t; may be fcn of z,e,f
frac_timeser: Use only those time series with this fraction valid data.
yes? show func eof_tfunc_tgap
EOF_TFUNC_TGAP(A,frac_timeser)
Compute EOF time functions from XYT field with gappy time series
A: Variable in x,y,t; may be fcn of z,e,f
frac_timeser: Use only those time series with this fraction valid data
- Functions for 64-bit Linux (RedHat 6 and equivalent)
- Functions for 32-bit Linux (RedHat 6 and equivalent)
- Functions for 64-bit Linux (RedHat 5 and equivalent)
- Functions for 32-bit Linux (RedHat 5 and equivalent)
Bug Fixes
1) When requesting more memory the error about "a negative number of words requested... grid too large" was mis-reporting the requested grid size. Now computations for the grid size are done in block size not word sizes, and are accurate. This means that larger grid sizes may be requested - if there is available memory on the local machine.
2) The SHOW MEMORY command lists number of words of memory allocated. The message shows the number of MegaWords currently allocated. In double-precision Ferret, a word is 8 bytes. The message previously said 4 bytes.
3) In the constant-array syntax, where a Ferret command contains a list of constants to become the values of a variable, the elements listed must be scalar constants. Ferret did not issue an error in some cases where an incorrect value is given. This is fixed; an error message is issued.
4) In ferret v6.84 a change was made to Ferret's multi-line labels so that if an ASCII font is specified at the start of the label, the font continues for all lines of the label. There were some inconsistencies in how those ASCII labels handled color and font changes. In this release, multi-line labels behave like single-line ones in all respects: the font remains ASCII, and to change color or change to another font, the escape character must be inserted before the @ sign.
5) A bug was discovered in the evaluation of variables using the fill transforms @FNR and @FAV to return filled data at a single location using the following syntax:
yes? list var[z=15@FNR:20] ! may have returned inconsistent results
yes? let fillvar = var[z=@FNR]; list/z=15 fillvar ! returned correct results
This is fixed so that both return correct results. The difference between the behavior of var[z=15@FNR:20] and var[z=@FNR] is documented.
6) On an axis which has a point_spacing = "even" attribute and coordinate bounds which do not enclose the coordinate points on the axis; Ferret stored the coordinate data incorrectly so the data could not be used. This has been fixed.
7) When the constant-array syntax is used to define a variable, the numbers must be constants. Previously some errors were not detected when trying to use numeric expressions. This is fixed. The following are errors which were previously not detected:
yes? list {0.1, 0.2, 1./5.}
**ERROR: command syntax: must be a constant 1./5.
yes? list {5*3+1, 2+3}
**ERROR: command syntax: must be a constant 5*3+1
8) When defining an ensemble of datasets, if the member datasets have variables with _FillValue but not missing_value attributes, the missing-data information was not correctly handled in the ensemble dataset. This is fixed.
9) Ribbon plots did not use a repeating set of colors when used with by-levels palettes. This is fixed.
10) Grave-accent evaluation of very small or large numbers needing scientific notation returned the replacement string with a bunch of trailing spaces. This is fixed.
yes? let a = -1.23e-2
yes? say (`a`)
!-> MESSAGE/CONTINUE (-0.0123)
(-0.0123)
11) When saving data to a netCDF file with mode upcase_output canceled, the axis names and any axis bounds variables should retain the original upper- or lower-case spelling of the axis names. The axis or its bounds variable was mistakenly written with an upper-case name in some instances. This is corrected.
12) Axis titles for PLOT/VS plots were incorrect, mis-labeling the variables plotted. This is fixed.
13) Changes are made to the computation of variance-based levels (e.g. /LEV=V for color plots). When computing the variance, if there is data outside 3 standard deviations, the variance and color levels are recomputed without those extreme values. This means that few extreme values do not dominate the color levels.
14) In a LET/D= definition, to associate a user-defined variable with a dataset, the syntax
LET/D=`sst,RETURN=dsetnum` variable = expression
returned an error. This is fixed.
15) The function LIST_VALUE_XML, used when Ferret is running behind LAS, needed to write longer strings. This is fixed.
16) In the block IF synatx, if the commands inside the if block contain a repeat loop, or an IF epxression THEN command statement, in some instances the end of the IF clause was not found when the block is not executed (e.g. an IF 0 THEN condition is in effect). This is fixed.
17) IT was discovered that a PLOT/VLOG command also included a /VLIMITS qualifier, the limits of the axis weren't checked for illegal values (We can't make a LOG axis if there are negative coordinates). Likewise for PLOT/HLOG/HLIMITS. This is fixed: negative coordinates on a log plot will always result in a Ferret error.