/* nag_2d_scat_interpolant(e01sac) Example Program * * Copyright 1996 Numerical Algorithms Group. * * Mark 4, 1996. * Mark 8 revised, 2004. * ********* This example illustrates how to interpolate using Shepherd's method only ************* */ #include #include #include #include int main(void) { Integer exit_status=0, i, j, m, n, nx, ny; Integer *triang=0; double *grads=0; NagError fail; Nag_2d_Scat_Method method; Nag_Scat_Struct comm; double *pf=0, *px=0, *py=0, xhi, xlo, yhi, ylo; double x[] = {11.16, 12.85, 19.85, 19.72, 15.91, 0.00, 20.87, 3.45, 14.26, 17.43, 22.80, 7.58, 25.00, 0.00, 9.66, 5.22, 17.25, 25.00, 12.13, 22.23, 11.52, 15.20, 7.54, 17.32, 2.14, 0.51, 22.69, 5.47, 21.67, 3.31}; double y[] = {1.24, 3.06, 10.72, 1.39, 7.74, 20.00, 20.00, 12.78, 17.87, 3.46, 12.39, 1.98, 11.87, 0.00, 20.00, 14.66, 19.57, 3.87, 10.79, 6.21, 8.53, 0.00, 10.69, 13.78, 15.03, 8.37, 19.63, 17.13, 14.36, 0.33}; double f[] = {22.15, 22.11, 7.97, 16.83, 15.30, 34.60, 5.74, 41.24, 10.74, 18.60, 5.47, 29.87, 4.40, 58.20, 4.73, 40.36, 6.43, 8.74, 13.71, 10.25, 15.74, 21.60, 19.31, 12.11, 53.10, 49.43, 3.25, 28.63, 5.52, 44.08}; INIT_FAIL(fail); Vprintf("e01sac Example Program Results\n"); /* The number of nodes. */ m = 30; if ( !( triang = NAG_ALLOC(7*m, Integer)) || !( grads = NAG_ALLOC(2*m, double)) ) { Vprintf("Allocation failure\n"); exit_status = -1; goto END; } method = Nag_RC; Vprintf("\nExample 1: Surface interpolation by method " "of Renka and Cline.\n\n"); /* * Generate the triangulation and gradients using the selected * method. */ #ifdef E01SAC e01sac(method, m, x, y, f, &comm, (Nag_E01_Opt *)0, &fail); #else e01sjc(m, x, y, f, triang, grads, &fail); #endif if (fail.code != NE_NOERROR) { Vprintf("Error from e01sac/e01sjc.\n%s\n", fail.message); exit_status = 1; goto END; } /* Input the domain for evaluating the interpolant. */ nx = 7; xlo = 3.0; xhi = 21.0; ny = 6; ylo = 2.0; yhi = 17.0; if (nx>=1 && ny>=1) { if ( !( pf = NAG_ALLOC(nx*ny, double)) || !( px = NAG_ALLOC(nx*ny, double)) || !( py = NAG_ALLOC(nx*ny, double)) ) { Vprintf("Allocation failure\n"); exit_status = -1; goto END; } } else { Vprintf("Invalid nx or ny.\n"); exit_status = 1; return exit_status; } /* * Evaluate the interpolant on a rectangular grid at nx*ny points * over the domain (xlo to xhi) x (ylo to yhi). */ for (j=0; j= 0; --i) { Vprintf("%8.2f ", py[nx * i]); for (j = 0; j < nx; j++) Vprintf("%8.2f", pf[nx * i + j]); Vprintf("\n"); } END: /* Free the memory allocated to the pointers in structure comm. */ #ifdef E01SAC e01szc(&comm); #endif if (pf) NAG_FREE(pf); if (px) NAG_FREE(px); if (py) NAG_FREE(py); return exit_status; }