|
Packit |
67cb25 |
#include <stdio.h>
|
|
Packit |
67cb25 |
#include <stdlib.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#include <gsl/gsl_math.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_interp2d.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_spline2d.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
main()
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
const gsl_interp2d_type *T = gsl_interp2d_bilinear;
|
|
Packit |
67cb25 |
const size_t N = 100; /* number of points to interpolate */
|
|
Packit |
67cb25 |
const double xa[] = { 0.0, 1.0 }; /* define unit square */
|
|
Packit |
67cb25 |
const double ya[] = { 0.0, 1.0 };
|
|
Packit |
67cb25 |
const size_t nx = sizeof(xa) / sizeof(double); /* x grid points */
|
|
Packit |
67cb25 |
const size_t ny = sizeof(ya) / sizeof(double); /* y grid points */
|
|
Packit |
67cb25 |
double *za = malloc(nx * ny * sizeof(double));
|
|
Packit |
67cb25 |
gsl_spline2d *spline = gsl_spline2d_alloc(T, nx, ny);
|
|
Packit |
67cb25 |
gsl_interp_accel *xacc = gsl_interp_accel_alloc();
|
|
Packit |
67cb25 |
gsl_interp_accel *yacc = gsl_interp_accel_alloc();
|
|
Packit |
67cb25 |
size_t i, j;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* set z grid values */
|
|
Packit |
67cb25 |
gsl_spline2d_set(spline, za, 0, 0, 0.0);
|
|
Packit |
67cb25 |
gsl_spline2d_set(spline, za, 0, 1, 1.0);
|
|
Packit |
67cb25 |
gsl_spline2d_set(spline, za, 1, 1, 0.5);
|
|
Packit |
67cb25 |
gsl_spline2d_set(spline, za, 1, 0, 1.0);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* initialize interpolation */
|
|
Packit |
67cb25 |
gsl_spline2d_init(spline, xa, ya, za, nx, ny);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* interpolate N values in x and y and print out grid for plotting */
|
|
Packit |
67cb25 |
for (i = 0; i < N; ++i)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double xi = i / (N - 1.0);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (j = 0; j < N; ++j)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double yj = j / (N - 1.0);
|
|
Packit |
67cb25 |
double zij = gsl_spline2d_eval(spline, xi, yj, xacc, yacc);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf("%f %f %f\n", xi, yj, zij);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
printf("\n");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_spline2d_free(spline);
|
|
Packit |
67cb25 |
gsl_interp_accel_free(xacc);
|
|
Packit |
67cb25 |
gsl_interp_accel_free(yacc);
|
|
Packit |
67cb25 |
free(za);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return 0;
|
|
Packit |
67cb25 |
}
|