DESCRIPTION OF INTERPOLATION LIBRARY written by Irina Kosinovsky 1995 this description was not edited/reviewed, please use with caution double IL_crst (r,fi) double r; /* radius */ double fi; /* tension */ Radial based generating function - completely regularized spline with tension (d=2) int IL_crstg (r, fi, gd1, gd2) double r; /* radius */ double fi; /* tension */ double *gd1; double *gd2; Function for calculating derivatives (d=2) int IL_input_data_2d(fdinp,root,zmult,xmin,xmax,ymin,ymax,zmin,zmax, MAXPOINTS,KMIN,KMAX,n_points) FILE *fdinp; /* input stream */ struct multtree *root; /* quadtree */ double zmult; /* multiplier for z-values */ double *xmin,*xmax,*ymin,*ymax,*zmin,*zmax; int maxpoints; /* max number of points per segment for interpolation */ int kmin; /* min number of points per segment for interpolation */ int kmax; /* max number of points per segment */ int *n_points; /* number of points used for interpolation */ Inserts input data inside the region into a quad tree. Also translates data. Returns number of segments in the quad tree. int IL_create_bitmask(maskmap,bitmask,nsizr,nsizc) char *maskmap; /* name of mask */ struct BM *bitmask; int nsizr,nsizc; /* number of rows and columns */ Creates a bitmap mask from given raster file int IL_grid_calc_2d(data,az,adx,ady,adxx,adyy,adxy, Tmp_fd_z,Tmp_fd_dx,Tmp_fd_dy,Tmp_fd_xx,Tmp_fd_yy,Tmp_fd_xy, bitmask,dnorm,zmin,zmax,zminac,zmaxac,gmin,gmax, c1min,c1max,c2min,c2max,ertot,fi,KMAX2,b,scik1,scik2,scik3,offset1, secpar,interp,interpder,wr_temp) struct quaddata *data; /* given segment */ double *az,*adx,*ady,*adxx,*adyy,*adxy; /* array for interpolated values */ FILE *Tmp_fd_z,*Tmp_fd_dx,*Tmp_fd_dy, /* temp files for writing interp.*/ *Tmp_fd_xx,*Tmp_fd_yy,*Tmp_fd_xy; /* values */ struct BM *bitmask; /* bitmask */ double dnorm; /* normalization factor */ double zmin,zmax; /* min and max input z-values */ double *zminac,*zmaxac, /* min and max interp. z-values */ *gmin,*gmax, /* min and max inperp. slope val.*/ *c1min,*c1max,*c2min,*c2max; /* min and max interp. curv. val.*/ double *ertot; /* total interplating func. error*/ double fi, /* tension */ int KMAX2; /* max num. of points for interp.*/ double *b; /* solutions of linear equations */ int scik1,scik2,scik3; /* multipliers for interp. values*/ int offset1; /* offset for temp file writing */ int (*secpar) (); /* calculates aspect,slope,curv. */ double (*interp) (); /* radial based interp. function*/ int (*interpder) (); /* interp. func. for derivatives */ int (*wr_temp) (); /* writes temp files */ Calculates grid for the given segment represented by data (contains n_rows, n_cols, ew_res,ns_res, and all points inside + overlap) using solutions of system of lin. equations and interpolating functions interp() and interpder(). Also calls secpar() to compute slope, aspect and curvatures if required. int IL_matrix_create(points,n_points,matrix,indx,fi,rsm,interp) struct triple *points; /* points for interpolation */ int n_points; /* number of points */ double **matrix; /* matrix */ int *indx; double fi; /* tension */ double rsm; /* smoothing */ double (*interp) (); /* interpolating function */ Creates system of linear equations represented by matrix using given points and interpolating function interp() int IL_check_at_points_2d (n_points, points,b,ertot,tension,interp,zmin,dnorm) int n_points; /* number of points */ struct triple *points; /* points for interpolation */ double *b; /* solution of linear equations */ double *ertot; /* total error */ double tension; /* tension */ double (*interp) ();/* interpolating function */ double zmin; /* min z-value */ double dnorm; /* normalizing factor */ Checks if interpolating function interp() evaluates correct z-values at given points. If smoothing is used calculate the maximum error caused by smoothing. int IL_secpar_loop_2d(ngstc,nszc,k,bitmask,adx,ady,adxx,adyy,adxy, gmin,gmax,c1min,c1max,c2min,c2max,cond1,cond2) int ngstc; /* starting column */ int nszc; /* ending column */ int k; /* current row */ struct BM *bitmask; double *adx,*ady,*adxx,*adyy,*adxy; /* derivatives */ double *gmin,*gmax,*c1min,*c1max,*c2min,*c2max; /* min,max interp. values */ int cond1,cond2; /*determine if particular values need to be computed*/ Computes slope, aspect and curvatures (depending on cond1, cond2) for derivative arrays adx,...,adxy between columns ngstc and nszc. int IL_write_temp_2d(ngstc,nszc,offset2,Tmp_fd_z,Tmp_fd_dx,Tmp_fd_dy,Tmp_fd_xx, Tmp_fd_yy,Tmp_fd_xy, az,adx,ady,adxx,adyy,adxy,scik1,scik2,scik3) int ngstc,nszc,offset2; /* begin. and end. column, offset */ FILE *Tmp_fd_z,*Tmp_fd_dx,*Tmp_fd_dy, /* Temp files */ *Tmp_fd_xx,*Tmp_fd_yy,*Tmp_fd_xy; double *az,*adx,*ady,*adxx,*adyy,*adxy; /* interpolated values */ int scik1,scik2,scik3; /* mutipliers for interp. values */ Writes az,adx,...,adxy into appropriate place (depending on ngstc, nszc and offset) in corresponding temp file */ int IL_interp_segments_2d (root, tree,az,adx,ady,adxx,adyy,adxy, Tmp_fd_z,Tmp_fd_dx,Tmp_fd_dy,Tmp_fd_xx,Tmp_fd_yy,Tmp_fd_xy,bitmask, dnorm,zmin,zmax,zminac,zmaxac,gmin,gmax,c1min,c1max, c2min,c2max,ertot,fi,KMIN,KMAX2,totsegm,rsm,scik1,scik2,scik3,offset1, grid_calc,matrix_create,check_points,secpar,interp,interpder,wr_temp) struct multtree *root; /* root of the quad tree */ struct multtree *tree; /* current leaf of the quad tree */ double *az,*adx,*ady,*adxx, /* interp. value arrays (for gridcalc()*/ *adyy,*adxy; FILE *Tmp_fd_z,*Tmp_fd_dx,*Tmp_fd_dy, /* temp files for writing */ *Tmp_fd_xx,*Tmp_fd_yy,*Tmp_fd_xy; /* for gridcalc() */ struct BM *bitmask; /* bitmask */ double dnorm; /* normalizing factor */ double zmin,zmax; /* min and max input z-values */ double *zminac,*zmaxac, /* min and max interp. z-values */ *gmin,*gmax, /* min and max inperp. slope val.*/ *c1min,*c1max,*c2min,*c2max; /* min and max interp. curv. val.*/ double *ertot; /* total interplating func. error*/ double fi, /* tension */ int KMIN; /* min num. of points for interp.*/ int KMAX2; /* max num. of points for interp.*/ int totsegm; /* total number of segments */ double rsm; /* smoothing (for matrix comput.)*/ int scik1,scik2,scik3; /* multipliers for interp. values*/ int offset1; /* offset for temp file writing */ int (*grid_calc) (); /*calculates grid for given segm*/ int (*matrix_create) (); /*creates matrix for a given segm*/ int (*check_points) (); /*checks interp. func. at points */ int (*secpar) (); /* calculates aspect,slope,curv. */ double (*interp) (); /* radial based interp. function*/ int (*interpder) (); /* interp. func. for derivatives */ int (*wr_temp) (); /* writes temp files */ Recursively processes each segment in a tree by a) finding points from neighbouring segments so that the total number of points is between KMIN and KMAX2 by calling tree function MT_get_region(). b) creating and solving the system of linear equations using these points and interp() by calling matrix_create() and G_ludcmp(). c) checking the interpolating function values at points by calling check_points(). d) computing grid for this segment using points and interp() by calling grid_calc(). int IL_output_2d (cellhd,nsizr,nsizc,elev,slope,aspect,pcurv,tcurv,mcurv, Tmp_fd_z,Tmp_fd_dx,Tmp_fd_dy,Tmp_fd_xx,Tmp_fd_yy,Tmp_fd_xy, zmin,zmax,zminac,zmaxac,c1min,c1max,c2min,c2max,gmin,gmax,scik1,scik2,scik3, dmin,fi,rsm,dnorm,zmult,KMAX,KMIN,ertot,input) struct Cell_head *cellhd; /* current region */ int nsizr,nsizc; /* number of rows,columns */ char *elev,*slope,*aspect,*pcurv,*tcurv,*mcurv; /* output files */ FILE *Tmp_fd_z,*Tmp_fd_dx,*Tmp_fd_dy, /* temp files */ *Tmp_fd_xx,*Tmp_fd_yy,*Tmp_fd_xy; double zmin,zmax, /* min,max input z-values */ zminac,zmaxac,c1min,c1max, /* min,max interpolated values */ c2min,c2max,gmin,gmax; int scik1,scik2,scik3; /*multipliers for interp. values */ double dmin; /* min distance between points */ double fi, /* tension */ double rsm; /* smoothing (for matrix comput.)*/ double dnorm; /* normalizing factor */ double zmult; /* multiplier for z-values */ int KMAX; /* max number of points per segm*/ int KMIN; /* min num. of points for interp.*/ double *ertot; /* total interplating func. error*/ char *input; /* input file name */ Creates output files as well as history files and color tables for them.