GRASS Programmer's Manual
6.4.2(2012)
|
00001 00002 /*- 00003 * Written by H. Mitasova, I. Kosinovsky, D. Gerdes Fall 1993 00004 * Copyright 1993, H. Mitasova , 00005 * I. Kosinovsky, and D.Gerdes 00006 * 00007 * modified by McCauley in August 1995 00008 * modified by Mitasova in August 1995 00009 * modified by Brown in June 1999 - added elatt & smatt 00010 * 00011 */ 00012 00013 #include <stdio.h> 00014 #include <math.h> 00015 #include <unistd.h> 00016 #include <grass/gis.h> 00017 #include <grass/interpf.h> 00018 00019 void IL_init_params_2d( 00020 /* initialize parameters */ 00021 struct interp_params *params, FILE * inp, /* input stream */ 00022 int elatt, /* which fp att in sites file? 1 = first */ 00023 int smatt, /* which fp att in sites file to use for 00024 * smoothing? (if zero use sm) 1 = first */ 00025 double zm, /* multiplier for z-values */ 00026 int k1, /* min number of points per segment for 00027 * interpolation */ 00028 int k2, /* max number of points per segment */ 00029 char *msk, /* name of mask */ 00030 int rows, int cols, /* number of rows and columns */ 00031 DCELL * ar1, DCELL * ar2, DCELL * ar3, DCELL * ar4, DCELL * ar5, DCELL * ar6, /* arrays for interpolated 00032 * values */ 00033 double tension, /* tension */ 00034 int k3, /* max num. of points for interp. */ 00035 int sc1, int sc2, int sc3, /* multipliers for interp. values */ 00036 double sm, /* smoothing */ 00037 char *f1, char *f2, char *f3, char *f4, char *f5, char *f6, /* output files */ 00038 double dm, /* min distance between points */ 00039 double x_or, double y_or, /* origin */ 00040 int der, /* 1 if compute partial derivs */ 00041 double tet, /* anisotropy angle, 0=East,counter-clockwise */ 00042 double scl, /* anisotropy scaling factor */ 00043 FILE * t1, FILE * t2, FILE * t3, FILE * t4, FILE * t5, FILE * t6, /* temp files for writing interp. values */ 00044 FILE * dev, /* pointer to deviations file */ 00045 struct TimeStamp *ts, int c, /* cross validation */ 00046 char *wheresql /* SQL WHERE */ 00047 ) 00048 { 00049 params->fdinp = inp; 00050 params->elatt = elatt; 00051 params->smatt = smatt; 00052 params->zmult = zm; 00053 params->kmin = k1; 00054 params->kmax = k2; 00055 params->maskmap = msk; 00056 params->nsizr = rows; 00057 params->nsizc = cols; 00058 params->az = ar1; 00059 params->adx = ar2; 00060 params->ady = ar3; 00061 params->adxx = ar4; 00062 params->adyy = ar5; 00063 params->adxy = ar6; 00064 params->fi = tension, params->KMAX2 = k3; 00065 params->scik1 = sc1; 00066 params->scik2 = sc2; 00067 params->scik3 = sc3; 00068 params->rsm = sm; 00069 params->elev = f1; 00070 params->slope = f2; 00071 params->aspect = f3; 00072 params->pcurv = f4; 00073 params->tcurv = f5; 00074 params->mcurv = f6; 00075 params->dmin = dm; 00076 params->x_orig = x_or; 00077 params->y_orig = y_or; 00078 params->deriv = der; 00079 params->theta = tet; 00080 params->scalex = scl; 00081 params->Tmp_fd_z = t1; 00082 params->Tmp_fd_dx = t2; 00083 params->Tmp_fd_dy = t3; 00084 params->Tmp_fd_xx = t4; 00085 params->Tmp_fd_yy = t5; 00086 params->Tmp_fd_xy = t6; 00087 params->fddevi = dev; 00088 params->ts = ts; 00089 params->cv = c; 00090 params->wheresql = wheresql; 00091 } 00092 00093 void IL_init_func_2d(struct interp_params *params, int (*grid_f) (void), /* calculates grid for given segm */ 00094 int (*matr_f) (void), /* creates matrix for a given segm */ 00095 int (*point_f) (void), /* checks interp. func. at points */ 00096 int (*secp_f) (void), /* calculates aspect,slope,curv. */ 00097 double (*interp_f) (void), /* radial basis function */ 00098 int (*interpder_f) (void), /* derivatives of radial basis func. */ 00099 int (*temp_f) (void) /* writes temp files */ 00100 ) 00101 00102 /* initialize functions */ 00103 { 00104 params->grid_calc = grid_f; 00105 params->matrix_create = matr_f; 00106 params->check_points = point_f; 00107 params->secpar = secp_f; 00108 params->interp = interp_f; 00109 params->interpder = interpder_f; 00110 params->wr_temp = temp_f; 00111 00112 }