Skip to content

Commit

Permalink
add registration bits for taosolver
Browse files Browse the repository at this point in the history
  • Loading branch information
sarich committed Jul 18, 2008
1 parent 4367fd9 commit 188c384
Show file tree
Hide file tree
Showing 3 changed files with 193 additions and 1 deletion.
8 changes: 7 additions & 1 deletion include/taosolver.h
Expand Up @@ -29,6 +29,11 @@ typedef enum {/* converged */
/* keep going */
TAO_CONTINUE_ITERATING = 0} TaoSolverTerminateReason;

#if defined PETSC_USE_DYNAMIC_LIBRARIES)
#define TaoSolverRegisterDynamic(a,b,c,d) TaoSolverRegister(a,b,c,0)
#else
#define TaoSolverRegisterDynamic(a,b,c,d) TaoSolverRegister(a,b,c,d)
#endif

EXTERN PetscErrorCode PETSC_DLLEXPORT TaoSolverCreate(MPI_Comm,TaoSolver*);
EXTERN PetscErrorCode PETSC_DLLEXPORT TaoSolverSetFromOptions(TaoSolver);
Expand All @@ -53,4 +58,5 @@ EXTERN PetscErrorCode PETSC_DLLEXPORT TaoSolverComputeGradient(TaoSolver, Vec, V
EXTERN PetscErrorCode PETSC_DLLEXPORT TaoSolverComputeObjectiveGradient(TaoSolver, Vec, PetscReal*, Vec);

PETSC_EXTERN_CXX_END
#endif
#endif /* ifndef __TAOSOLVER_H */

73 changes: 73 additions & 0 deletions src/interface/dlregistaosolver.c
@@ -0,0 +1,73 @@
#define TAOSOLVER_DLL

#include "include/private/taosolver_impl.h"

#undef __FUNCT__
#define __FUNCT__ "TaoSolverInitializePackage"
/*@C
TaoSolverInitializePackage - This function sets up PETSc to use the TaoSolver
package. When using static libraries, this function is called from the
first entry to TaoSolverCreate(); when using shared libraries, it is called
from PetscDLLibraryRegister()
Input parameter:
. path - The dynamic library path or PETSC_NULL
Level: developer
.seealso: TaoSolverCreate()
@*/
PetscErrorCode TAOSOLVER_DLLEXPORT TaoSolverInitializePackage(const char path[])
{
static PetscTruth initialized = PETSC_FALSE;
PetscErrorCode ierr;

PetscFunctionBegin;

if (initialized) PetscFunctionReturn(0);
initialized = PETSC_TRUE;

ierr = PetscCookieRegister("TaoSolver",&TAOSOLVER_COOKIE); CHKERRQ(ierr);

/* Tell PETSc what solvers are available */
ierr = TaoSolverRegisterAll(path); CHKERRQ(ierr);

/* Tell PETSc what events are associated with TaoSolver */
ierr = PetscLogEventRegister("TaoSolverSolve",TAOSOLVER_COOKIE,&TaoSolver_Solve); CHKERRQ(ierr);
ierr = PetscLogEventRegister("TaoSolverObjectiveEval",TAOSOLVER_COOKIE,&TaoSolver_ObjectiveEval); CHKERRQ(ierr);
ierr = PetscLogEventRegister("TaoSolverGradientEval",TAOSOLVER_COOKIE,&TaoSolver_GradientEval); CHKERRQ(ierr);
ierr = PetscLogEventRegister("TaoSolverHessianEval",TAOSOLVER_COOKIE,&TaoSolver_HessianEval); CHKERRQ(ierr);
ierr = PetscLogEventRegister("TaoSolverJacobianEval",TAOSOLVER_COOKIE,&TaoSolver_JacobianEval); CHKERRQ(ierr);


PetscFunctionReturn(0);
}

#ifdef PETSC_USE_DYNAMIC_LIBRARIES
EXTERN_C_BEGIN
#undef __FUNCT__
#define __FUNCT__ "PetscDLLibraryRegister_taosolver"
/*
PetscDLLibraryRegister - this function is called when the dynamic library it
is in is opened.
This registers all of the TaoSolver methods that are in the libtaosolver
library.
Input Parameter:
. path - library path
*/

PetscErrorCode TAOSOLVER_DLLEXPORT PetscDLLibraryRegister_taosolver(const char path[])
{
PetscErrorCode ierr;

ierr = PetscInitializeNoArguments();
if (ierr)
return 1;
PetscFunctionBegin;
ierr = TaoSolverInitializePackage(path); CHKERRQ(ierr);
PetscFunctionReturn(0);
}
EXTERN_C_END
#endif /*PETSC_USE_DYNAMIC_LIBRARIES*/
113 changes: 113 additions & 0 deletions src/interface/taosolverregi.c
@@ -0,0 +1,113 @@
#define TAOSOLVER_DLL

#include "include/private/taosolver_impl.h"


EXTERN_C_BEGIN
extern int TaoCreate_LMVM(TAO_SOLVER);
/*
extern int TaoCreate_NLS(TAO_SOLVER);
extern int TaoCreate_NTR(TAO_SOLVER);
extern int TaoCreate_NTL(TAO_SOLVER);
extern int TaoCreate_CG(TAO_SOLVER);
extern int TaoCreate_TRON(TAO_SOLVER);
extern int TaoCreate_BQPIP(TAO_SOLVER);
extern int TaoCreate_BLMVM(TAO_SOLVER);
extern int TaoCreate_BNLS(TAO_SOLVER);
extern int TaoCreate_GPCG(TAO_SOLVER);
extern int TaoCreate_QPIP(TAO_SOLVER);
extern int TaoCreate_NLSQ(TAO_SOLVER);
extern int TaoCreate_BLM(TAO_SOLVER);
extern int TaoCreate_SSILS(TAO_SOLVER);
extern int TaoCreate_SSFLS(TAO_SOLVER);
extern int TaoCreate_ASILS(TAO_SOLVER);
extern int TaoCreate_ASFLS(TAO_SOLVER);
extern int TaoCreate_ISILS(TAO_SOLVER);
extern int TaoCreate_KT(TAO_SOLVER);
extern int TaoCreate_BCG(TAO_SOLVER);
extern int TaoCreate_RSCS(TAO_SOLVER);
extern int TaoCreate_ICP(TAO_SOLVER);
extern int TaoCreate_NM(TAO_SOLVER);
extern int TaoCreate_FD(TAO_SOLVER);
*/
EXTERN_C_END

/*
Offset the convergence reasons so negative number represent diverged and
positive represent converged.
*/
const char *TaoSolverConvergedReasons_Shifted[] = {
"DIVERGED_USER",
"DIVERGED_TR_REDUCTION",
"DIVERGED_LS_FAILURE",
"DIVERGED_MAXFCN",
"DIVERGED_NAN",
"DIVERGED_MAXITS",
"DIVERGED_FUNCTION_DOMAIN",

"CONTINUE_ITERATING",

" ",
"CONVERGED_ATOL",
"CONVERGED_RTOL",
"CONVERGED_TRTOL",
"CONVERGED_MINF",
"CONVERGED_USER" };
const char **TaoSolverConvergedReasons = TaoSolverConvergedReasons_Shifted + 8;




extern PetscTruth TaoSolverRegisterAllCalled;

#undef __FUNCT__
#define __FUNCT__ "TaoSolverRegisterAll"
/*@C
TaoSolverRegisterAll - Registersall of the minimization methods in the TAO
package.
Not Collective
Level: developer
.seealso TaoSolverRegisterDynamic(), TaoSolverRegisterDestroy()
@*/
PetscErrorCode TAOSOLVER_DLLEXPORT TaoSolverRegisterAll(const char path[])
{
PetscErrorCode ierr;

PetscFunctionBegin;
TaoSolverRegisterAllCalled = PETSC_TRUE;

ierr = TaoSolverRegisterDynamic("tao_lmvm",path,"TaoCreate_LMVM",TaoCreate_LMVM); CHKERRQ(ierr);

/*
ierr = TaoSolverRegisterDynamic("tao_nls",path,"TaoCreate_NLS",TaoCreate_NLS); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_cg",path,"TaoCreate_CG",TaoCreate_CG); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_bqpip",path,"TaoCreate_BQPIP",TaoCreate_BQPIP); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_blmvm",path,"TaoCreate_BLMVM",TaoCreate_BLMVM); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_bnls",path,"TaoCreate_BNLS",TaoCreate_BNLS); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_tron",path,"TaoCreate_TRON",TaoCreate_TRON); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_nm",path,"TaoCreate_NM",TaoCreate_NM); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_ntl",path,"TaoCreate_NTL",TaoCreate_NTL); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_ntr",path,"TaoCreate_NTR",TaoCreate_NTR); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_gpcg",path,"TaoCreate_GPCG",TaoCreate_GPCG); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_ssils",path,"TaoCreate_SSILS",TaoCreate_SSILS); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_ssfls",path,"TaoCreate_SSFLS",TaoCreate_SSFLS); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_asils",path,"TaoCreate_ASILS",TaoCreate_ASILS); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_asfls",path,"TaoCreate_ASFLS",TaoCreate_ASFLS); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_isils",path,"TaoCreate_ISILS",TaoCreate_ISILS); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_kt",path,"TaoCreate_KT",TaoCreate_KT); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_rscs",path,"TaoCreate_RSCS",TaoCreate_RSCS); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_icp",path,"TaoCreate_ICP",TaoCreate_ICP); CHKERRQ(ierr);
ierr = TaoSolverRegisterDynamic("tao_fd_test",path,"TaoCreate_FD",TaoCreate_FD); CHKERRQ(ierr);
*/

TaoFunctionReturn(0);
}

0 comments on commit 188c384

Please sign in to comment.