- The first point
- The last point
- The ratio of the largest to smallest grid spacing
- The number of points

NUgrid* create_center_grid (doubleThe center grid function has an analytic inverse, which can be used to find the nearest grid point to a given point very quickly.start, doubleend, doubleratio, intnum_points);

NUgrid* create_general_grid (double *points, intnum_points);

void destroy_grid (NUgrid*grid);

NUBspline_1d_s * create_NUBspline_1d_s (NUgrid*x_grid, BCtype_sxBC, float *data); NUBspline_2d_s * create_NUBspline_2d_s (NUgrid*x_grid, NUgrid*y_grid, BCtype_sxBC, BCtype_syBC, float *data); NUBspline_3d_s * create_NUBspline_3d_s (NUgrid*x_grid, NUgrid*y_grid, NUgrid*z_grid, BCtype_sxBC, BCtype_syBC, BCtype_szBC, float *data);

NUBspline_1d_c * create_NUBspline_1d_c (NUgrid*x_grid, BCtype_cxBC, complex_float *data); NUBspline_2d_c * create_NUBspline_2d_c (NUgrid*x_grid, NUgrid*y_grid, BCtype_cxBC, BCtype_cyBC, complex_float *data); NUBspline_3d_c * create_NUBspline_3d_c (NUgrid*x_grid, NUgrid*y_grid, NUgrid*z_grid, BCtype_cxBC, BCtype_cyBC, BCtype_czBC, complex_float *data);

NUBspline_1d_d * create_NUBspline_1d_d (NUgrid*x_grid, BCtype_dxBC, double *data); NUBspline_2d_d * create_NUBspline_2d_d (NUgrid*x_grid, NUgrid*y_grid, BCtype_dxBC, BCtype_dyBC, double *data); NUBspline_3d_d * create_NUBspline_3d_d (NUgrid*x_grid, NUgrid*y_grid, NUgrid*z_grid, BCtype_dxBC, BCtype_dyBC, BCtype_dzBC, double *data);

NUBspline_1d_z * create_NUBspline_1d_z (NUgrid*x_grid, BCtype_zxBC, complex_double *data); NUBspline_2d_z * create_NUBspline_2d_z (NUgrid*x_grid, NUgrid*y_grid, BCtype_zxBC, BCtype_zyBC, complex_double *data); NUBspline_3d_z * create_NUBspline_3d_z (NUgrid*x_grid, NUgrid*y_grid, NUgrid*z_grid, BCtype_zxBC, BCtype_zyBC, BCtype_zzBC, complex_double *data);

void destroy_Bspline (void *Thespline);

- Value only
- Value and gradient
- Value, gradient, and Laplacian
- Value, gradient, and Hessian (matrix of 2nd derivatives)

Quick Jump Table | 1D | 2D | 3D |

Single-precision real | 1ds | 2ds | 3ds |

Single-precision complex | 1dc | 2dc | 3dc |

Double-precision real | 1dd | 2dd | 3dd |

Double-precision complex | 1dz | 2dz | 3dz |

inline void eval_NUBspline_1d_s (NUBspline_1d_s * restrictspline, doublex, float* restrictval); inline void eval_NUBspline_1d_s_vg (NUBspline_1d_s * restrictspline, doublex, float* restrictval, float* restrictgrad); inline void eval_NUBspline_1d_s_vgl (NUBspline_1d_s * restrictspline, doublex, float* restrictval, float* restrictgrad, float* restrictlapl); inline void /* identical to above routine in 1D */ eval_NUBspline_1d_s_vgh (NUBspline_1d_s * restrictspline, doublex, float* restrictval, float* restrictgrad, float* restricthess);

inline void eval_NUBspline_2d_s (NUBspline_2d_s * restrictspline, doublex, doubley, float* restrictval); inline void eval_NUBspline_2d_s_vg (NUBspline_2d_s * restrictspline, doublex, doubley, float* restrictval, float* restrictgrad); inline void eval_NUBspline_2d_s_vgl (NUBspline_2d_s * restrictspline, doublex, doubley, float* restrictval, float* restrictgrad, float* restrictlapl); inline void eval_NUBspline_2d_s_vgh (NUBspline_2d_s * restrictspline, doublex, doubley, float* restrictval, float* restrictgrad, float* restricthess);

inline void eval_NUBspline_3d_s (NUBspline_3d_s * restrictspline, doublex, doubley, doublez, float* restrictval); inline void eval_NUBspline_3d_s_vg (NUBspline_3d_s * restrictspline, doublex, doubley, doublez, float* restrictval, float* restrictgrad); inline void eval_NUBspline_3d_s_vgl (NUBspline_3d_s * restrictspline, doublex, doubley, doublez, float* restrictval, float* restrictgrad, float* restrictlapl); inline void eval_NUBspline_3d_s_vgh (NUBspline_3d_s * restrictspline, doublex, doubley, float* restrictval, float* restrictgrad, float* restricthess);

inline void eval_NUBspline_1d_c (NUBspline_1d_c * restrictspline, doublex, complex_float* restrictval); inline void eval_NUBspline_1d_c_vg (NUBspline_1d_c * restrictspline, doublex, complex_float* restrictval, complex_float* restrictgrad); inline void eval_NUBspline_1d_c_vgl (NUBspline_1d_c * restrictspline, doublex, complex_float* restrictval, complex_float* restrictgrad, complex_float* restrictlapl); inline void /* identical to above routine in 1D */ eval_NUBspline_1d_c_vgh (NUBspline_1d_c * restrictspline, doublex, complex_float* restrictval, complex_float* restrictgrad, complex_float* restricthess);

inline void eval_NUBspline_2d_c (NUBspline_2d_c * restrictspline, doublex, doubley, complex_float* restrictval); inline void eval_NUBspline_2d_c_vg (NUBspline_2d_c * restrictspline, doublex, doubley, complex_float* restrictval, complex_float* restrictgrad); inline void eval_NUBspline_2d_c_vgl (NUBspline_2d_c * restrictspline, doublex, doubley, complex_float* restrictval, complex_float* restrictgrad, complex_float* restrictlapl); inline void eval_NUBspline_2d_c_vgh (NUBspline_2d_c * restrictspline, doublex, doubley, complex_float* restrictval, complex_float* restrictgrad, complex_float* restricthess);

inline void eval_NUBspline_3d_c (NUBspline_3d_c * restrictspline, doublex, doubley, doublez, complex_float* restrictval); inline void eval_NUBspline_3d_c_vg (NUBspline_3d_c * restrictspline, doublex, doubley, doublez, complex_float* restrictval, complex_float* restrictgrad); inline void eval_NUBspline_3d_c_vgl (NUBspline_3d_c * restrictspline, doublex, doubley, doublez, complex_float* restrictval, complex_float* restrictgrad, complex_float* restrictlapl); inline void eval_NUBspline_3d_c_vgh (NUBspline_3d_c * restrictspline, doublex, doubley, complex_float* restrictval, complex_float* restrictgrad, complex_float* restricthess);

inline void eval_NUBspline_1d_d (NUBspline_1d_d * restrictspline, doublex, double* restrictval); inline void eval_NUBspline_1d_d_vg (NUBspline_1d_d * restrictspline, doublex, double* restrictval, double* restrictgrad); inline void eval_NUBspline_1d_d_vgl (NUBspline_1d_d * restrictspline, doublex, double* restrictval, double* restrictgrad, double* restrictlapl); inline void /* identical to above routine in 1D */ eval_NUBspline_1d_d_vgh (NUBspline_1d_d * restrictspline, doublex, double* restrictval, double* restrictgrad, double* restricthess);

inline void eval_NUBspline_2d_d (NUBspline_2d_d * restrictspline, doublex, doubley, double* restrictval); inline void eval_NUBspline_2d_d_vg (NUBspline_2d_d * restrictspline, doublex, doubley, double* restrictval, double* restrictgrad); inline void eval_NUBspline_2d_d_vgl (NUBspline_2d_d * restrictspline, doublex, doubley, double* restrictval, double* restrictgrad, double* restrictlapl); inline void eval_NUBspline_2d_d_vgh (NUBspline_2d_d * restrictspline, doublex, doubley, double* restrictval, double* restrictgrad, double* restricthess);

inline void eval_NUBspline_3d_d (NUBspline_3d_d * restrictspline, doublex, doubley, doublez, double* restrictval); inline void eval_NUBspline_3d_d_vg (NUBspline_3d_d * restrictspline, doublex, doubley, doublez, double* restrictval, double* restrictgrad); inline void eval_NUBspline_3d_d_vgl (NUBspline_3d_d * restrictspline, doublex, doubley, doublez, double* restrictval, double* restrictgrad, double* restrictlapl); inline void eval_NUBspline_3d_d_vgh (NUBspline_3d_d * restrictspline, doublex, doubley, double* restrictval, double* restrictgrad, double* restricthess);

inline void eval_NUBspline_1d_z (NUBspline_1d_z * restrictspline, doublex, complex_double* restrictval); inline void eval_NUBspline_1d_z_vg (NUBspline_1d_z * restrictspline, doublex, complex_double* restrictval, complex_double* restrictgrad); inline void eval_NUBspline_1d_z_vgl (NUBspline_1d_z * restrictspline, doublex, complex_double* restrictval, complex_double* restrictgrad, complex_double* restrictlapl); inline void /* identical to above routine in 1D */ eval_NUBspline_1d_z_vgh (NUBspline_1d_z * restrictspline, doublex, complex_double* restrictval, complex_double* restrictgrad, complex_double* restricthess);

inline void eval_NUBspline_2d_z (NUBspline_2d_z * restrictspline, doublex, doubley, complex_double* restrictval); inline void eval_NUBspline_2d_z_vg (NUBspline_2d_z * restrictspline, doublex, doubley, complex_double* restrictval, complex_double* restrictgrad); inline void eval_NUBspline_2d_z_vgl (NUBspline_2d_z * restrictspline, doublex, doubley, complex_double* restrictval, complex_double* restrictgrad, complex_double* restrictlapl); inline void eval_NUBspline_2d_z_vgh (NUBspline_2d_z * restrictspline, doublex, doubley, complex_double* restrictval, complex_double* restrictgrad, complex_double* restricthess);

inline void eval_NUBspline_3d_z (NUBspline_3d_z * restrictspline, doublex, doubley, doublez, complex_double* restrictval); inline void eval_NUBspline_3d_z_vg (NUBspline_3d_z * restrictspline, doublex, doubley, doublez, complex_double* restrictval, complex_double* restrictgrad); inline void eval_NUBspline_3d_z_vgl (NUBspline_3d_z * restrictspline, doublex, doubley, doublez, complex_double* restrictval, complex_double* restrictgrad, complex_double* restrictlapl); inline void eval_NUBspline_3d_z_vgh (NUBspline_3d_z * restrictspline, doublex, doubley, complex_double* restrictval, complex_double* restrictgrad, complex_double* restricthess);