/** @file interpol2.h * @brief Header file for interpol2.c. */ #ifndef _INTERPOL2_H_ /* We will certainly never use a 16th order scheme, * but in case we do, remember to change it here */ #define MAX_ORDER 16 #define MAX_INTERPOL_METHODS 9 typedef struct interpol_t interpol_t; typedef struct interpol_method_t interpol_method_t; struct interpol_t { double *coeffs; double *stencil; /* The separation between stencil points. */ double Lr, Lz; /* The interpolation method to use. */ interpol_method_t *method; /* Origin of the interpolation polynomial, which is thus written in powers of (r - r0) and (z - z0). */ double r0, z0; }; struct interpol_method_t { double *matrix; /* p is the order of the polynomial plus one. * q is the number of stencil points in one direction (the total * number is, of course, q^2. */ int p, q; /* Location of the origin with respect to the stencil in units of L. */ int ir0, iz0; int masses; void (*set_coeffs) (interpol_t *this); double (*apply) (interpol_t *this, double r, double z); }; extern interpol_method_t interpol_zero; extern interpol_method_t interpol_wackers; extern interpol_method_t interpol_luque; extern interpol_method_t interpol_quadratic; extern interpol_method_t interpol_bilin; extern interpol_method_t interpol_quadlog; extern interpol_method_t interpol_zero_masses; extern interpol_method_t interpol_wackers_masses; extern interpol_method_t interpol_luque_masses; extern interpol_method_t interpol_quadratic_masses; extern interpol_method_t interpol_bilin_masses; extern interpol_method_t *interpol_methods_index[MAX_INTERPOL_METHODS]; #define _INTERPOL2_H_ #endif