aboutsummaryrefslogtreecommitdiff
path: root/pkg/utilities/nttools/trebin/tuifit.x
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/utilities/nttools/trebin/tuifit.x')
-rw-r--r--pkg/utilities/nttools/trebin/tuifit.x63
1 files changed, 63 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/trebin/tuifit.x b/pkg/utilities/nttools/trebin/tuifit.x
new file mode 100644
index 00000000..2f3a2d84
--- /dev/null
+++ b/pkg/utilities/nttools/trebin/tuifit.x
@@ -0,0 +1,63 @@
+include "trebin.h"
+
+# tuifit -- initialize or fit
+# The input arrays of independent and dependent variable values are copied
+# to output arrays, skipping indef values. The number of good values
+# (i.e. not indef) is checked to make sure there are enough for the type
+# of interpolation specified. In the case of spline interpolation, the
+# array y2 of second derivatives is computed.
+#
+# Phil Hodge, 18-Apr-1988 Subroutine created
+# Phil Hodge, 17-Jun-1993 Require at least two values for linear interpolation.
+
+procedure tuifit (i_func, xin, yin, inrows,
+ xa, ya, y2, n)
+
+int i_func # i: interpolation function code
+double xin[ARB] # i: array of independent-variable values
+double yin[ARB] # i: array of dependent-variable values
+int inrows # i: size of xin, yin arrays
+double xa[ARB] # o: array of independent-variable values
+double ya[ARB] # o: array of dependent-variable values
+double y2[ARB] # o: used only by spline interpolation
+int n # o: size of xa, ya, y2 arrays
+#--
+pointer sp
+pointer work # scratch for spline fit
+int k # loop index
+
+begin
+ n = 0 # initial value
+
+ do k = 1, inrows {
+ if ( ! IS_INDEFD(xin[k]) && ! IS_INDEFD(yin[k])) {
+ n = n + 1
+ xa[n] = xin[k]
+ ya[n] = yin[k]
+ }
+ }
+
+ switch (i_func) {
+ case I_NEAREST:
+ if (n < 1)
+ n = 0 # flag it as bad
+
+ case I_LINEAR:
+ if (n < 2)
+ n = 0
+
+ case I_POLY3:
+ if (n < 4)
+ n = 0
+
+ case I_SPLINE:
+ if (n >= 4) {
+ call smark (sp)
+ call salloc (work, n, TY_DOUBLE)
+ call tucspl (xa, ya, n, Memd[work], y2)
+ call sfree (sp)
+ } else {
+ n = 0
+ }
+ }
+end