XSLPchguserfunc
XSLPchguserfunc |
int XPRS_CC XSLPchguserfunc(XSLPprob Prob, int nSLPUF, char *xName, int *ArgType, int *ExeType, char *Param1, char *Param2, char *Param3);
Prob
|
The current SLP problem.
|
||||||||||||||||||
nSLPUF
|
The number of the user function. This always counts from 1. A value of zero will create a new function.
|
||||||||||||||||||
xName
|
Character string containing the null-terminated external name of the user function. Note that this is not the name used in written formulae, which is created by the
XSLPaddnames function if required.
|
||||||||||||||||||
ArgType
|
bitmap specifying existence and type of arguments:
|
||||||||||||||||||
ExeType
|
type of function:
|
||||||||||||||||||
Param1
|
null-terminated character string for first parameter (
FILE).
|
||||||||||||||||||
Param2
|
null-terminated character string for second parameter (
ITEM).
|
||||||||||||||||||
Param3
|
null-terminated character string for third parameter (
HEADER).
|
Suppose we have the following user functions written in C in a library lib01:
Func1 which takes two arguments and returns two values
Func2 which takes one argument and returns the value and (optionally) the derivative of the function. Although the function is referred to as Func2 in the problem, we are actually using the function NewFunc2 from the library.
The following example adds the two functions to the SLP problem:
int nUF; XSLPgetintattrib(Prob,XSLP_UFS,&nUF); XSLPchguserfunc(Prob, 0, NULL, 023, 1, "lib01", NULL, NULL); XSLPchguserfunc(Prob, 0, "NewFunc2", 010023, 1, "lib01", NULL, NULL); XSLPaddnames(Prob,XSLP_USERFUNCNAMES,"Func1\0Func2", nUF+1,nUF+2);
A NULL value for any of the arguments leaves the existing value (if any) unchanged. If the call is defining a new user function, a NULL value will leave the default value unchanged.
The following constants are provided for setting evaluation and derivative bits in ExeType:
Setting bit 3: XSLP_RECALC
Setting bit 4: XSLP_TOLCALC
Setting bit 6: XSLP_2DERIVATIVE
Setting bit 7: XSLP_1DERIVATIVE
Setting bit 9: XSLP_INSTANCEFUNCTION
Setting bit 24: XSLP_MULTIVALUED
Setting bit 28: XSLP_NODERIVATIVES
If bit 9 (XSLP_INSTANCEFUNCTION) is set, then calls to the function will be grouped according to the argument list, so that the function is called only once for each unique set of arguments. This happens automatically if the function is "complicated" (see the section on "User function interface" for more details).
Bit 24 (XSLP_MULTIVALUED) does not have to be set if the function is multi-valued and it requires RETNAME, DELTA or RESULTS. It must be set if the function is multi-valued, does not use any of those arrays, and may be called directly by the user application using XSLPcalluserfunc.
If bit 28 (XSLP_NODERIVATIVES) is set, then formulae involving the function will always be evaluated using numerical derivatives.