EXTERN_C_BEGIN int TaoCreate_CG_FR(TAO_SOLVER tao) { TAO_CG *cg; int info; TaoFunctionBegin; info = TaoNew(TAO_CG,&cg); CHKERRQ(info); info = TaoSetMaximumIterates(tao,2000); CHKERRQ(info); info = TaoSetTolerances(tao,1e-4,1e-4,0,0); CHKERRQ(info); info = TaoSetMaximumFunctionEvaluations(tao,4000); CHKERRQ(info); info = TaoCreateMoreThuenteLineSearch(tao,0,0.1); CHKERRQ(info); info = TaoSetTaoSolveRoutine(tao,TaoSolve_CG_FR,(void*)cg); CHKERRQ(info); info = TaoSetTaoSetUpDownRoutines(tao,TaoSetUp_CG,TaoDestroy_CG); CHKERRQ(info); info = TaoSetTaoOptionsRoutine(tao,TaoSetOptions_CG_FR); CHKERRQ(info); info = TaoSetTaoViewRoutine(tao,TaoView_CG); CHKERRQ(info); TaoFunctionReturn(0); } EXTERN_C_ENDThe first thing this routine does after declaring some variables, is allocate memory for the TAO_CG data structure. Clones of the the variable vector assed into TAO in the TaoCreate() routine are used as the two work vectors. This routine also sets some default convergence tolerances and creates a particular line search. These defaults could be specified in the routine that solves the problem, but specifying them here gives the user the opportunity to modify these parameters.
Finally, this solvers passes to TAO the names of all the other routines used by the solver.
Note that the lines EXTERN_C_BEGIN and EXTERN_C_END surround this routine. These macros are required to preserve the name of this function without any name-mangling from the C++ compiler.