!>	\brief	Interpolation functions
!! The instrument function is the reciprocal of the interpolation function.
!! The arguments to the interpolation functions are given in pixels
!! The arguments to the instrument functions are given in boxsizes.
MODULE MOD_INTERPOL

	TYPE ::	INTERPOLATION_SCHEME
		PROCEDURE(INTERPOLATION_FUNCTION),	POINTER,	NOPASS	::	INTERPOLATION_FUNCTION
		PROCEDURE(WINDOWING_FUNCTION),		POINTER,	NOPASS	::	WINDOWING_FUNCTION
		INTEGER	::	WINDOW_WIDTH
		PROCEDURE(INTERPOLATION_FUNCTION),	POINTER,	NOPASS	::	INTERPOLATION_INSTR_FUNCTION
		PROCEDURE(WINDOWING_FUNCTION),		POINTER,	NOPASS	::	WINDOWING_INSTR_FUNCTION
	END TYPE

	!>	This defines what an interpolation function should look like.
	ABSTRACT INTERFACE
		PURE REAL FUNCTION INTERPOLATION_FUNCTION(ARG)
			REAL,	INTENT(IN)	::	ARG
		END FUNCTION INTERPOLATION_FUNCTION
	END INTERFACE

	!>	A windowing function is almost like an interpolating function, but its width is one of the arguments
	ABSTRACT INTERFACE
		PURE REAL FUNCTION WINDOWING_FUNCTION(ARG,WIDTH)
			REAL,		INTENT(IN)	::	ARG
			INTEGER,	INTENT(IN)	::	WIDTH
		END FUNCTION
	END INTERFACE

END MODULE
