/*@@ @header cctk_Interp.h @date July 07 1999 @author Thomas Radke @desc Header file for using interpolation operators @enddesc @history @date July 07 1999 @author Thomas Radke @hdesc Just copied from cctk_Reduction.h @date Thu Feb 21 14:36:02 CET 2002 @author Jonathan Thornburg @hdesc add more comments, add new stuff for new interpolator API @endhistory @@*/ #ifndef _CCTK_INTERP_H_ #define _CCTK_INTERP_H_ #ifdef __cplusplus extern "C" { #endif /* * typedefs for interpolation operator routines */ typedef int (*cInterpOperatorGV)(cGH *GH, const char *coord_system, int num_points, int num_in_array_indices, int num_out_arrays, const void *const interp_coord_arrays[], const int interp_coord_array_types[], const int in_array_indices[], void *const out_arrays[], const int out_array_types[]); typedef int (*cInterpOperatorLocal)(cGH *GH, int num_points, int num_dims, int num_in_arrays, int num_out_arrays, const int coord_dims[], const void *const coord_arrays[], const int coord_array_types[], const void *const interp_coord_arrays[], const int interp_coord_array_types[], const void *const in_arrays[], const int in_array_types[], void *const out_arrays[], const int out_array_types[]); typedef int (*cInterpOpLocalUniform)(int N_dims, int param_table_handle, /***** coordinate system *****/ const CCTK_REAL coord_origin[], const CCTK_REAL coord_delta[], /***** interpolation points *****/ int N_interp_points, int interp_coords_type_code, const void *const interp_coords[], /***** input arrays *****/ int N_input_arrays, const CCTK_INT input_array_dims[], const CCTK_INT input_array_type_codes[], const void *const input_arrays[], /***** output arrays *****/ int N_output_arrays, const CCTK_INT output_array_type_codes[], void *const output_arrays[]); /* * prototypes for user-visible interpolation-registration API */ int CCTK_InterpHandle (const char *name); #define CCTK_InterpRegisterOperatorGV(operator_ptr, operator_name) \ CCTKi_InterpRegisterOperatorGV(operator_ptr, \ operator_name, \ CCTK_THORNSTRING) /* end macro */ int CCTKi_InterpRegisterOperatorGV(cInterpOperatorGV operator_ptr, const char *operator_name, const char *thorn_name); #define CCTK_InterpRegisterOperatorLocal(operator_ptr, operator_name) \ CCTKi_InterpRegisterOperatorLocal(operator_ptr, \ operator_name, \ CCTK_THORNSTRING) /* end macro */ int CCTKi_InterpRegisterOperatorLocal(cInterpOperatorLocal operator_ptr, const char *operator_name, const char *thorn_name); int CCTK_InterpRegisterOpLocalUniform(cInterpOpLocalUniform operator_ptr, const char *operator_name, const char *thorn_name); const char *CCTK_InterpOperatorImplementation(int handle); const char *CCTK_InterpOperator(int handle); int CCTK_NumInterpOperators(void); /* * prototypes for user-visible interpolation API */ int CCTK_InterpGV (cGH *GH, int operator_handle, int coord_system_handle, int num_points, int num_in_array_indices, int num_out_arrays, ...); int CCTK_InterpLocal (cGH *GH, int operator_handle, int num_points, int num_dims, int num_in_arrays, int num_out_arrays, ...); int CCTK_InterpLocalUniform(int N_dims, int operator_handle, int param_table_handle, /***** coordinate system *****/ const CCTK_REAL coord_origin[], const CCTK_REAL coord_delta[], /***** interpolation points *****/ int N_interp_points, int interp_coords_type_code, const void *const interp_coords[], /***** input arrays *****/ int N_input_arrays, const CCTK_INT input_array_dims[], const CCTK_INT input_array_type_codes[], const void *const input_arrays[], /***** output arrays *****/ int N_output_arrays, const CCTK_INT output_array_type_codes[], void *const output_arrays[]); /* * error codes for CCTK_InterpLocalUniform() */ /* an interpolation point is outside the range of the input arrays */ #define CCTK_ERROR_INTERP_POINT_X_RANGE (-1000) #ifdef __cplusplus } #endif #endif /* _INTERP_H_ */