/* xmd - molecular dynamics for metals and ceramics By Jonathan Rifkin Copyright 1995-2004 Jonathan Rifkin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __CDFUNC_H #define __CDFUNC_H /* ************************************************************************ DEFINES ************************************************************************ */ #define FUNC_EXTRAP_CONST_SLOPE 0 #define FUNC_EXTRAP_CONST_VALUE 1 #define FUNC_EXTRAP_ZERO 2 #define FUNC_EXTRAP_UNDEFINED 3 #define FUNC_BOUND_CONST_SLOPE 0 #define FUNC_BOUND_CONST_VALUE 1 #define FUNC_BOUND_ZERO 2 #define FUNC_BOUND_OUTOFRANGE 3 #define FUNC_COMMAND_ERROR 0 #define FUNC_COMMAND_READ 1 #define FUNC_COMMAND_SCALE 2 #define FUNC_INPUT 0 #define FUNC_OUTPUT 1 /* ************************************************************************ Macros ************************************************************************ */ /* Build boundary flag */ #define MAKE_BOUND_FLAG(INT_EXTRAP, INT_BOUND, EXT_EXTRAP, EXT_BOUND) \ ( \ ((INT_EXTRAP)<<6) | \ ((INT_BOUND )<<4) | \ ((EXT_EXTRAP)<<2) | \ (EXT_BOUND) \ ) #define GET_INT_EXTRAP(BOUND_FLAG) (((BOUND_FLAG) >>6) & 0x03) #define GET_INT_BOUND(BOUND_FLAG) (((BOUND_FLAG) >>4) & 0x03) #define GET_EXT_EXTRAP(BOUND_FLAG) (((BOUND_FLAG) >>2) & 0x03) #define GET_EXT_BOUND(BOUND_FLAG) (((BOUND_FLAG) >>0) & 0x03) /* ************************************************************************ Type Definitions ************************************************************************ */ typedef double FunctionCall_t (void *, double); typedef struct { int DataType; int BoundaryType; double InteriorCutoff; double ExteriorCutoff; double InteriorValue; double ExteriorValue; double InteriorSlope; double ExteriorSlope; FunctionCall_t *f0; FunctionCall_t *f1; double *Coeff; int NumCoeff; int Power1; int Power2; double TableFactor; double x0; } Function_t; /* ************************************************************************ Function Prototypes ************************************************************************ */ Function_t *FUNC_CreateNullFunction (void); int FUNC_Parse (Function_t *, char *); void FUNC_ParseRead (Function_t *, char *); void FUNC_ParseScale(Function_t *, char *); void FUNC_Free (Function_t **Function); void FUNC_Scale (Function_t *F, double Scale, int InOrOut); double FUNC_GetValue (Function_t *F, double x); double FUNC_GetDeriv (Function_t *F, double x); double FUNC_GetCutoff (Function_t *F); #endif