1441846f8SBarry Smith #define TAO_DLL 2a7e14dcfSSatish Balay 3af0996ceSBarry Smith #include <petsc/private/taoimpl.h> 4a7e14dcfSSatish Balay 5a7e14dcfSSatish Balay static PetscBool TaoPackageInitialized = PETSC_FALSE; 6a7e14dcfSSatish Balay 7a7e14dcfSSatish Balay /*@C 8a7e14dcfSSatish Balay TaoFinalizePackage - This function destroys everything in the PETSc/TAO 9441846f8SBarry Smith interface to the Tao package. It is called from PetscFinalize(). 10a7e14dcfSSatish Balay 11a7e14dcfSSatish Balay Level: developer 12a7e14dcfSSatish Balay @*/ 13a7e14dcfSSatish Balay PetscErrorCode TaoFinalizePackage(void) 14a7e14dcfSSatish Balay { 15a7e14dcfSSatish Balay PetscErrorCode ierr; 16a7e14dcfSSatish Balay 17a7e14dcfSSatish Balay PetscFunctionBegin; 18441846f8SBarry Smith ierr = PetscFunctionListDestroy(&TaoList);CHKERRQ(ierr); 19a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_FALSE; 20a7e14dcfSSatish Balay PetscFunctionReturn(0); 21a7e14dcfSSatish Balay } 22a7e14dcfSSatish Balay 23*6285c0a3SHansol Suh const char *const TaoADMMRegularizerTypes[] = {"REGULARIZER_USER","REGULARIZER_SOFT_THRESH","TaoADMMRegularizerType","TAO_ADMM_",0}; 24*6285c0a3SHansol Suh const char *const TaoADMMUpdateTypes[] = {"UPDATE_BASIC","UPDATE_ADAPTIVE","UPDATE_ADAPTIVE_RELAXED","TaoADMMUpdateType","TAO_ADMM_",0}; 25a7e14dcfSSatish Balay /*@C 26441846f8SBarry Smith TaoInitializePackage - This function sets up PETSc to use the Tao 278a690491SBarry Smith package. When using static or shared libraries, this function is called from the 288a690491SBarry Smith first entry to TaoCreate(); when using shared or static libraries, it is called 298a690491SBarry Smith from PetscDLLibraryRegister_tao() 30a7e14dcfSSatish Balay 31a7e14dcfSSatish Balay Level: developer 32a7e14dcfSSatish Balay 33a7e14dcfSSatish Balay .seealso: TaoCreate() 34a7e14dcfSSatish Balay @*/ 35600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void) 36a7e14dcfSSatish Balay { 378e81d068SLisandro Dalcin char logList[256]; 388e81d068SLisandro Dalcin PetscBool opt,pkg; 39a7e14dcfSSatish Balay PetscErrorCode ierr; 40a7e14dcfSSatish Balay 41a7e14dcfSSatish Balay PetscFunctionBegin; 42a7e14dcfSSatish Balay 43a7e14dcfSSatish Balay if (TaoPackageInitialized) PetscFunctionReturn(0); 44a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_TRUE; 458e81d068SLisandro Dalcin /* Register Classes */ 46441846f8SBarry Smith ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr); 478e81d068SLisandro Dalcin /* Register Constructors */ 48441846f8SBarry Smith ierr = TaoRegisterAll();CHKERRQ(ierr); 498e81d068SLisandro Dalcin /* Register Events */ 500ebee16dSLisandro Dalcin ierr = PetscLogEventRegister("TaoSolve", TAO_CLASSID,&TAO_Solve);CHKERRQ(ierr); 510ebee16dSLisandro Dalcin ierr = PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval);CHKERRQ(ierr); 520ebee16dSLisandro Dalcin ierr = PetscLogEventRegister("TaoGradientEval", TAO_CLASSID,&TAO_GradientEval);CHKERRQ(ierr); 530ebee16dSLisandro Dalcin ierr = PetscLogEventRegister("TaoObjGradEval", TAO_CLASSID,&TAO_ObjGradEval);CHKERRQ(ierr); 540ebee16dSLisandro Dalcin ierr = PetscLogEventRegister("TaoHessianEval", TAO_CLASSID,&TAO_HessianEval);CHKERRQ(ierr); 550ebee16dSLisandro Dalcin ierr = PetscLogEventRegister("TaoConstrEval", TAO_CLASSID,&TAO_ConstraintsEval);CHKERRQ(ierr); 560ebee16dSLisandro Dalcin ierr = PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID,&TAO_JacobianEval);CHKERRQ(ierr); 578e81d068SLisandro Dalcin /* Process info exclusions */ 588e81d068SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 598e81d068SLisandro Dalcin if (opt) { 608e81d068SLisandro Dalcin ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr); 618e81d068SLisandro Dalcin if (pkg) {ierr = PetscInfoDeactivateClass(TAO_CLASSID);CHKERRQ(ierr);} 628e81d068SLisandro Dalcin } 638e81d068SLisandro Dalcin /* Process summary exclusions */ 648e81d068SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 658e81d068SLisandro Dalcin if (opt) { 668e81d068SLisandro Dalcin ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr); 67fa2bb9feSLisandro Dalcin if (pkg) {ierr = PetscLogEventExcludeClass(TAO_CLASSID);CHKERRQ(ierr);} 688e81d068SLisandro Dalcin } 698e81d068SLisandro Dalcin /* Register package finalizer */ 70a7e14dcfSSatish Balay ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr); 71a7e14dcfSSatish Balay PetscFunctionReturn(0); 72a7e14dcfSSatish Balay } 73a7e14dcfSSatish Balay 74a7e14dcfSSatish Balay #ifdef PETSC_USE_DYNAMIC_LIBRARIES 75a7e14dcfSSatish Balay /* 76a7e14dcfSSatish Balay PetscDLLibraryRegister - this function is called when the dynamic library it 77a7e14dcfSSatish Balay is in is opened. 78a7e14dcfSSatish Balay 79441846f8SBarry Smith This registers all of the Tao methods that are in the libtao 80a7e14dcfSSatish Balay library. 81a7e14dcfSSatish Balay 82a7e14dcfSSatish Balay Input Parameter: 83a7e14dcfSSatish Balay . path - library path 84a7e14dcfSSatish Balay */ 85a7e14dcfSSatish Balay 86a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_tao(void) 87a7e14dcfSSatish Balay { 88a7e14dcfSSatish Balay PetscErrorCode ierr; 89a7e14dcfSSatish Balay 90a7e14dcfSSatish Balay PetscFunctionBegin; 91a7e14dcfSSatish Balay ierr = TaoInitializePackage();CHKERRQ(ierr); 92a7e14dcfSSatish Balay ierr = TaoLineSearchInitializePackage();CHKERRQ(ierr); 93a7e14dcfSSatish Balay PetscFunctionReturn(0); 94a7e14dcfSSatish Balay } 95a7e14dcfSSatish Balay 96a7e14dcfSSatish Balay #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 97