diff --git a/include/interpol2.h b/include/interpol2.h new file mode 100644 index 0000000000000000000000000000000000000000..283035d293a23846a75f0f69ff8506c64143502f --- /dev/null +++ b/include/interpol2.h @@ -0,0 +1,65 @@ +/** @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