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 are described in detail. The name of every user written function starts with user_. There are three kinds of arguments:
|ERROR||Error in the user function. Printing an error message is the user's responsibility. Depending on the work the user function was supposed to do, the error might be ignored (and some default option used), or the process aborts.|
|USER_AND_PP||The user implemented both the user function and post-processing (post-processing by SYMPHONY will be skipped).|
|USER_NO_PP||The user implemented the user function only.|
|DEFAULT||The default option is going to be used (the default is one of the built-in options, SYMPHONY decides which one to use based on initial parameter settings and the execution of the algorithm).|
|built_in_option2 ...||The specified built-in option will be used.|