ezscint is now CVS based and a new versioning scheme is used.
Release versions are now tagged using the naming scheme "Month-day-year" e.g Oct-11-2001, Sept-21-2001, etc. The use of CVS allows the retrieval of the code as it was on the release dates.
Changes :
Several bug fixes, some minor, some major. The complete list of changes can be found in the ChangeLog file.
ezscint is now part of the pre-release version of rmnlib, librmn_x.a
Compile your code using
r.compile -src myprog.ftn -o myprog -librmn rmn_x
If you want to have access to the latest (and not the safest) release of the library, use the beta version.
r.compile -src myprog.ftn -o myprog -librmn rmnbeta
IRIX64 (mach, pollux)
Linux (galois, euler et al.)
HP-UX (newton, for a limited time)
The NECs.
ezscint is now CVS-based.
To access the code, go on pollux and type the following
. r.cvs_rmnlib.dot At the "passwd" prompt type cvs.
You normally will have to do that only once.
Then, go in a directory under which the source code will be created. Make sure you don't have a directory called "interp"!
cd ~/src cvs get interp You will now have a directory called "interp" and up to date with the latest version. To compile the code, just type make obj
In its ready-for-library form, the package counts 4 files
ezscint.h
ez_funcdef.h
c_ezscint.c
f_ezscint.ftn
The source code is provided to satisfy your own curiosity and to give you the chance to use the code to other purposes that it was designed for, such as porting it to exotic platforms. However by modifying the source you declare yourself as "knowing what you are doing" and renounce to any form of support by the author.
Bug fix in c_ezcorrvec_aunord et c_ezcorrvec_ausud. There was an error in the test of the grid type of the source grid.
Bug fix in c_ezcorrval_aunord and c_ezcorrval_ausud. The subroutine for nearest neighbor interpolation had an error in one of its arguments.
C code has been cleaned up for unused variables.
Fixed a memory leak in ezuvint.
Successfully passed an acid test written by Michel Grenier, with 27 different grid definitions and back and forth conversions from lat-lon to x-y coordinates.
Successfully passed an "efence" test with pgsm. "efence" is a library that checks malloc calls for pointer corruption. For more information about efence follow this link. efence is available on pollux and all Linux platforms. To use efence, simply type
Introduced a numbering scheme in the version revisions. Current version is defined as "3.13" and the others will follow according to that scheme. Why "3.13" ? The current version of "ezscint" is 3, and 13 has been a lucky number for me.
The core interpolation routines do their computations in double precision.
The grids are not expanded anymore before going through the interpolation. For example, a (400,200) grid was expanded to (-1:402, -1:202) before the interpolation was done. This was allowing the bi-cubic interpolation to be defined everywhere in the domain. As the operational grids are getting bigger, this method was getting inefficient, especially when the number of points to interpolate was small. The same functionality is achieved through the use of modulo functions on points that lie on the east-west boundary. The points at the pole are processed separately.
At the polar regions the interpolation is done in an extra step. Points that lie at or near the pole are kept in a list that is processed after the regular interpolation.
The three main interpolation routines (rgdint, irgdint and gggdint) have been "exploded" in 13 routines, classified by their interpolation degree and their need to take into account the boundary positions.
Scalar interpolation method at or near the pole has been simplified. The value at the pole is now the average of the last circle of latitude. The interpolation of the values in the polar region is made on a (ni,4) grid by in which the last row is the interpolated value at the pole.
Vector interpolation at and near the poles has also been simplified, although the overall method used is more complicated. Here is the algorithm.
Convert the wind components on the first (south pole) or last (north pole) latitude to x and y components.
Compute an "average x-y wind" at the pole.
Convert the coordinates of the average wind to wind speed-direction.
Convert the coordinates of the average wind back to x-y on the lat-lon grid, corrected by the longitude. These values are considered to be "the wind at the pole" and are used in an additional row on lat-lon grids that do not reach the pole (i.e. 'A', 'G' and 'E' grids).
The code has been cleaned up a bit, especially in file taxonomy.
This release is still beta. Some parts of the code have been de-activated, waiting for a new facelift :
The use of the sine and cosine of the lat-lons to accelerate computations int vector interpolation from/to GEM type grids has been temporarily de-activated. The code will be a little bit slower on the front-ends.
The grid management routines have been de-activated. Grids are never freed. This should not be a problem for most applications, since only 2-3 grids are used. The previous managing mechanism had serious flaws.
There is much less overhead in the interpolation at lat-lon points (routines gdllsval and gdllvval), and the interpolation process is as efficient as it could get.
Re-activate pre-calculations of the sine and cosine of lat-lon points
Re-activate code to handle hemispheric grids structured upside down
Re-activate grid and gridset management
Add new routines to facilitate grid definition by providing the information read by the positional records ('>>' and '^^') in addition of the current routines.
Modify the gridset structure to provide multiple input grids for a given target grid (as this will be seen in '#' grids).
Separate the routines that access RPN standard files from the package to create an "helper package".
Document the whole thing.
Author: Yves Chartier, RPN, Dorval.
Last updated: Thursday, October 18, 2001