File diff 000000000000 → d6faa5ffcedf
include/interpol2.h
Show inline comments
 
new file 100644
 
/** @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