2013-03-12 04:48:21 +08:00
|
|
|
#ifndef INTERPOLATION_H
|
|
|
|
#define INTERPOLATION_H
|
|
|
|
|
|
|
|
#include "stdio.h"
|
|
|
|
#include "stdlib.h"
|
|
|
|
#include "string.h"
|
|
|
|
#include "memory.h"
|
2017-10-01 00:12:15 +08:00
|
|
|
|
|
|
|
extern "C" typedef struct { double r, i; } doublecomplex;
|
2013-03-12 04:48:21 +08:00
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
class Interpolate{
|
|
|
|
public:
|
|
|
|
Interpolate(int, int, int, int, doublecomplex **);
|
|
|
|
~Interpolate();
|
|
|
|
|
|
|
|
void set_method();
|
|
|
|
void execute(double *, doublecomplex *);
|
|
|
|
void reset_gamma();
|
|
|
|
|
|
|
|
int UseGamma;
|
|
|
|
|
|
|
|
private:
|
|
|
|
void tricubic_init();
|
|
|
|
void tricubic(double *, doublecomplex *);
|
|
|
|
void trilinear(double *, doublecomplex *);
|
|
|
|
Memory *memory;
|
|
|
|
|
|
|
|
int which;
|
|
|
|
int Nx, Ny, Nz, Npt, ndim;
|
|
|
|
int flag_reset_gamma, flag_allocated_dfs;
|
|
|
|
|
|
|
|
doublecomplex **data;
|
|
|
|
doublecomplex **Dfdx, **Dfdy, **Dfdz, **D2fdxdy, **D2fdxdz, **D2fdydz, **D3fdxdydz;
|
|
|
|
double a[64], f[8], dfdx[8], dfdy[8], dfdz[8], d2fdxdy[8], d2fdxdz[8], d2fdydz[8], d3fdxdydz[8];
|
|
|
|
int vidx[8];
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|