/*@C TaoInitializePackage - This function sets up PETSc to use the Tao package. When using static libraries, this function is called from the first entry to TaoCreate(); when using shared libraries, it is called from PetscDLLibraryRegister() Level: developer .seealso: TaoCreate() @*/ PetscErrorCode TaoInitializePackage(void) { PetscErrorCode ierr; PetscFunctionBegin; if (TaoPackageInitialized) PetscFunctionReturn(0); TaoPackageInitialized = PETSC_TRUE; ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr); /* Tell PETSc what solvers are available */ ierr = TaoRegisterAll();CHKERRQ(ierr); /* Tell PETSc what events are associated with Tao */ ierr = PetscLogEventRegister("TaoSolve",TAO_CLASSID,&Tao_Solve);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoObjectiveEval",TAO_CLASSID,&Tao_ObjectiveEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoGradientEval",TAO_CLASSID,&Tao_GradientEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoHessianEval",TAO_CLASSID,&Tao_HessianEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoConstraintsEval",TAO_CLASSID,&Tao_ConstraintsEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoJacobianEval",TAO_CLASSID,&Tao_JacobianEval);CHKERRQ(ierr); ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr); PetscFunctionReturn(0); }
EXTERN_C_BEGIN #undef __FUNCT__ #define __FUNCT__ "PetscDLLibraryRegister_tao" /* DLLibraryRegister - This function is called when the dynamic library it is in is opened. This registers all of the TAO methods that are in the basic libtao library. Input Parameter: path - library path */ int PetscDLLibraryRegister_tao(const char *path) { int info; TaoFunctionBegin; #ifdef TAO_USE_PETSC info = PetscInitializeNoArguments(); if (info) return 1; #endif /* If we got here then PETSc was properly loaded */ info = TaoRegisterAll(path);CHKERRQ(info); TaoFunctionReturn(0); }
/*@C TaoInitializePackage - This function sets up PETSc to use the Tao package. When using static or shared libraries, this function is called from the first entry to TaoCreate(); when using shared or static libraries, it is called from PetscDLLibraryRegister_tao() Level: developer .seealso: TaoCreate() @*/ PetscErrorCode TaoInitializePackage(void) { char logList[256]; PetscBool opt,pkg; PetscErrorCode ierr; PetscFunctionBegin; if (TaoPackageInitialized) PetscFunctionReturn(0); TaoPackageInitialized = PETSC_TRUE; /* Register Classes */ ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr); /* Register Constructors */ ierr = TaoRegisterAll();CHKERRQ(ierr); /* Register Events */ ierr = PetscLogEventRegister("TaoSolve", TAO_CLASSID,&TAO_Solve);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoGradientEval", TAO_CLASSID,&TAO_GradientEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoObjGradEval", TAO_CLASSID,&TAO_ObjGradEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoHessianEval", TAO_CLASSID,&TAO_HessianEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoConstrEval", TAO_CLASSID,&TAO_ConstraintsEval);CHKERRQ(ierr); ierr = PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID,&TAO_JacobianEval);CHKERRQ(ierr); /* Process info exclusions */ ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); if (opt) { ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr); if (pkg) {ierr = PetscInfoDeactivateClass(TAO_CLASSID);CHKERRQ(ierr);} } /* Process summary exclusions */ ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); if (opt) { ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr); if (pkg) {ierr = PetscLogEventExcludeClass(TAO_CLASSID);CHKERRQ(ierr);} } /* Register package finalizer */ ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr); PetscFunctionReturn(0); }