Back to SYMPHONY Home Page
Next: Data Structures
Up: Introduction
Previous: Source Files
The majority of the user functions are called from either the master
process or the LP process. For these two modules, user functions are
invoked from so-called wrapper functions that provide the
interface. Each wrapper function is named *_u() , where *
is the name of the corresponding user function, and is defined in a
file called *_wrapper.c. The wrapper function first collects
the necessary data and hands it to the user by calling the user
function. Based on the return value from the user, the wrapper then
performs any necessary post-processing. Most user functions are
designed so that the user can do as little or as much as she likes.
Where it is feasible, there are default options that allow the user to
do nothing if the default behavior is acceptable. This is not possible
in all cases and the user must provide certain functions, such as
separation.
In the next section, the user functions will be described in detail.
The name of every user written function starts with user_.
There are three kinds of arguments:
- IN:
- An argument containing information that the user might need
to perform the function.
- OUT:
- A pointer to an argument in which the user should
return a result (requested data, decision, etc.) of the function.
- INOUT:
- An argument which contains information the user might need,
but also for which the user can change the value.
The return values from each function are as follows:
- Return values:
-
- Notes:
-
- Sometimes an output is optional. This will always be noted in the
function descriptions.
- If an array has to be returned (i.e., the argument is type
**array) then (unless otherwise noted) the user has to allocate space
for the array itself and set *array to be the array allocated.
If an output array is optional then the user must not set
*array for the array she is not going to fill up because this is how
SYMPHONY decides which optional arrays are filled up.
- Some built-in options are implemented so that the user can invoke them
directly from the user function. This might be useful if, for example,
the user wants to use different built-in options at different stages
of the algorithm, or if he wants to do the post-processing himself but
does not want to implement the option itself.
Next: Data Structures
Up: Introduction
Previous: Source Files
Ted Ralphs
Thu Jun 8 12:44:45 CDT 2000