aboutsummaryrefslogtreecommitdiff
path: root/math/interp/iimail
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /math/interp/iimail
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'math/interp/iimail')
-rw-r--r--math/interp/iimail213
1 files changed, 213 insertions, 0 deletions
diff --git a/math/interp/iimail b/math/interp/iimail
new file mode 100644
index 00000000..69c19e9f
--- /dev/null
+++ b/math/interp/iimail
@@ -0,0 +1,213 @@
+From tody Wed Apr 20 18:50:45 1983
+Date: 20 Apr 1983 18:50-MST
+To: vesa
+Subject: ii comments
+Cc: tody
+
+I read through "tnotes1", and felt that enough information was conveyed
+to explain how the asi___ routines work, and how to use them. It is
+good documentation for the package, though some sections are probably
+to technical for the general user, and should probably be moved to an
+appendix in the final documentation.
+
+I only have one minor suggestion, and that is that there seems little
+reason to abbreviate NEAR, REFL, and PROJ, since only three characters
+are saved in each case, and the other parameter names are all spelled out.
+
+I also looked at the code for ASIFIT. I noticed that the recursion
+relations for the cubic spline are coded inline. I suspect that this
+is actually LESS efficient than using a separate procedure, due to
+the complex coeff offset expressions appearing in the inner loops
+(unless the Fortran compiler does a very good job of optimizing loops).
+
+By using a separate procedure, for example, the statement
+
+ coeff[COFF+i] = coeff[off2+i] * (coeff[COFF+i] - coeff[COFF+i-1])
+
+can be converted to something like
+
+ bcoeff[i] = acoeff[i] * (bcoeff[i] - bcoeff[i-1])
+
+where in the main routine, there is a procedure call something like the
+following:
+
+ call fit_bspline3 (coeff[COFF], coeff[off2], ...)
+
+In other words, the routines that actually do the work do not need to
+know that everything is saved in a single coeff array. This simplifies
+the code, as well as making it run faster on some machines. The technique
+has an additional advantage: by isolating the compute bound code into
+a separate (small) procedure, it becomes easy to hand optimize that procedure
+in assembler, should we wish to do so.
+
+From tody Wed Apr 20 19:48:51 1983
+Date: 20 Apr 1983 19:48-MST
+To: vesa
+Subject: first benchmarks
+Cc: tody
+
+I ran some preliminary benchmarks on the asi code, assuming no bad pixels.
+The benchmark routine is in math/interp. Results:
+
+512 by 512 image interpolation, no bad pixels, using ASIEVA:
+
+ nearest 47 (cpu seconds)
+ linear 22
+ poly3 50
+ poly5 89
+ spline3 94
+
+This is quite encouraging. I expect that these timings can be decreased by
+a factor of from 3 to 5, given a good Fortran compiler (the current UNIX
+compiler is very poor), and possibly hand optimising critical sections of
+the code in assembler.
+
+The nearest neighbor timings don't make any sense (that should be the
+fastest interpolant). Are you using sqrt, or something like that?
+The spline timings are worse than I expected, compared to poly3. May
+be due to complex offset expressions, which F77 does not optimize.
+
+From tody Fri Feb 18 14:10:36 1983
+To: vesa
+Subject: x code
+Cc: tody
+
+
+We want to make IRAF source code as readable as possible, therefore there
+is a (currently unofficial) standard for ".x" code. Your code is pretty
+close to the standard, but here are some things to consider:
+
+ (1) It is preferable to enclose large blocks of documentation in
+ .help .. .endhelp sections, rather than making each line a comment.
+ This has two advantages: (1) it is awkward to edit text set off with
+ a # on each line, and (2) the help utilities can only extract
+ source code documentation which is set in help blocks. It is not
+ necessary to use text formatter commands in help blocks, i.e.,
+ you can simply type it in as it will appear on the terminal.
+
+ In the same vein, it is better to put the discussion of the input
+ and output parameters in the help text, rather than in the
+ declarations section of the procedure. Placing each input and
+ output parameter on a single line, followed at the right by a short
+ comment, gets the job done without cluttering up the declarations
+ section. More extensive comments should be placed in the help text.
+
+
+ (2) It is mostly up to the programmer to decide where to put whitespace
+ to make the structure of a program clearest. Whitespace should
+ be inserted in a statement to make the important logical components
+ of the statement stand out.
+
+ In particular, there should be a space after every keyword, before
+ the left parenthesis. If the statement is compound, the left brace
+ should be set off from the right paren by a space. In short
+ expressions, operators should be set off by whitespace.
+
+ Adding whitespace between a function name and the left paren is
+ optional, as is whitespace between the elements of an argument list
+ (after commas).
+
+ Blank lines should be used to set off sections of code, just as
+ blank lines are used to separate paragraphs of text.
+
+ It is possible to overcomment code, making it hard to read. If
+ more than a third of the lines in a procedure are comments, the
+ code is probably overcommented. Place detailed discussion of the
+ algorithm in the help text.
+
+
+ (3) Indenting structures by full tab stops is acceptable, but 4 space
+ indents are preferred (the code rapidly runs off the right side of
+ the screen if full tab indents are used, encouraging use of too
+ short identifiers and omission of whitespace). The autoindent
+ feature of VI makes this easy (in .login file: 'set ai sw=4').
+
+
+ (4) The standard form of the if .. else construct is
+
+ if (expr) {
+ stmt
+ } else {
+ stmt
+
+ or (if "stmt" is several lines, and whitespace is desired)
+
+ if (expr) {
+ stmt
+
+ } else {
+ stmt
+
+ rather than
+
+ if (expr) {
+ stmt
+ }
+ else {
+ stmt
+
+From tody Fri Feb 18 15:21:33 1983
+Date: 18 Feb 1983 15:21-MST
+To: vesa
+Subject: spec changes
+Cc: tody
+
+
+Now that Garth, Harvey, Steve and others have had a chance to comment on the
+specs for the interpolator routines, it is time to make the final revisions
+to the specifications. Often ones perspective on a problem changes when one
+actually begins coding, and even the most carefully prepared specifications
+need to be changed. Please feel free to suggest further changes.
+
+
+Modifications
+
+ (1) Everyone wanted the interpolators to be able to generate estimated
+ values to replace indefinites (as an option).
+
+ (2) Steve wanted sinc function interpolation added to the set of
+ interpolators. I would also like to try this for undersampled
+ CCD data. A fairly high "order" (basis function size) seems
+ justified for this interpolant.
+
+ (3) A surface integration routine is desired (MSIGRL).
+
+
+SET Routines
+
+ I think we should generalize the form of the "set" routines to permit
+options such as (1), and others we may wish to add in the future (such
+as telling the interpolator not to check for indefinites in the data).
+
+Set routines are also used in the FIO, IMIO, VSIO, and GIO packages in
+the program interface. For example, in FIO, the number of buffers for a
+file could be set by a call of the form
+
+ call fset (fd, NBUFFERS, 2)
+
+The form of a set call is therefore
+
+ call ___set (object, parameter, value)
+
+i.e.,
+
+ call asiset (coeff, II_INTERPOLANT, II_DIVDIF3)
+ call asiset (coeff, II_TYBNDRY, II_NEAREST)
+ call asiset (coeff, II_REPLACE_INDEFS, YES)
+
+Note that the prefix "II_" must be added to all Image Interpolation
+defined parameters and parameter values. This is unattractive, but necessary
+to avoid redefinitions of identifiers in other packages, such as IMIO (IMIO
+has the same boundary extension options as II).
+
+
+Surface Integration
+
+ I suggest the following calling sequence for the surface integration
+routine:
+
+ integral = msigrl (x, y, npts, coeff)
+
+where the surface to be integrated is defined by the closed curve {x[i],y[i]},
+where 1 <= i <= npts, defined by the caller.
+