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 PetscFunctionBegin; 169566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&TaoList)); 17a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_FALSE; 18a7e14dcfSSatish Balay PetscFunctionReturn(0); 19a7e14dcfSSatish Balay } 20a7e14dcfSSatish Balay 21a7e14dcfSSatish Balay /*@C 22441846f8SBarry Smith TaoInitializePackage - This function sets up PETSc to use the Tao 238a690491SBarry Smith package. When using static or shared libraries, this function is called from the 248a690491SBarry Smith first entry to TaoCreate(); when using shared or static libraries, it is called 258a690491SBarry Smith from PetscDLLibraryRegister_tao() 26a7e14dcfSSatish Balay 27a7e14dcfSSatish Balay Level: developer 28a7e14dcfSSatish Balay 29*db781477SPatrick Sanan .seealso: `TaoCreate()` 30a7e14dcfSSatish Balay @*/ 31600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void) 32a7e14dcfSSatish Balay { 338e81d068SLisandro Dalcin char logList[256]; 348e81d068SLisandro Dalcin PetscBool opt,pkg; 35a7e14dcfSSatish Balay 36a7e14dcfSSatish Balay PetscFunctionBegin; 37a7e14dcfSSatish Balay if (TaoPackageInitialized) PetscFunctionReturn(0); 38a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_TRUE; 398e81d068SLisandro Dalcin /* Register Classes */ 409566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Tao",&TAO_CLASSID)); 418e81d068SLisandro Dalcin /* Register Constructors */ 429566063dSJacob Faibussowitsch PetscCall(TaoRegisterAll()); 438e81d068SLisandro Dalcin /* Register Events */ 449566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoSolve", TAO_CLASSID,&TAO_Solve)); 459566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval)); 469566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoGradientEval", TAO_CLASSID,&TAO_GradientEval)); 479566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoObjGradEval", TAO_CLASSID,&TAO_ObjGradEval)); 489566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoHessianEval", TAO_CLASSID,&TAO_HessianEval)); 499566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoConstrEval", TAO_CLASSID,&TAO_ConstraintsEval)); 509566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID,&TAO_JacobianEval)); 51e94e781bSJacob Faibussowitsch /* Process Info */ 52e94e781bSJacob Faibussowitsch { 53e94e781bSJacob Faibussowitsch PetscClassId classids[1]; 54e94e781bSJacob Faibussowitsch 55e94e781bSJacob Faibussowitsch classids[0] = TAO_CLASSID; 569566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("tao", 1, classids)); 578e81d068SLisandro Dalcin } 588e81d068SLisandro Dalcin /* Process summary exclusions */ 599566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt)); 608e81d068SLisandro Dalcin if (opt) { 619566063dSJacob Faibussowitsch PetscCall(PetscStrInList("tao",logList,',',&pkg)); 629566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(TAO_CLASSID)); 638e81d068SLisandro Dalcin } 648e81d068SLisandro Dalcin /* Register package finalizer */ 659566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(TaoFinalizePackage)); 66a7e14dcfSSatish Balay PetscFunctionReturn(0); 67a7e14dcfSSatish Balay } 68a7e14dcfSSatish Balay 69a82e8c82SStefano Zampini #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 70a7e14dcfSSatish Balay /* 71a7e14dcfSSatish Balay PetscDLLibraryRegister - this function is called when the dynamic library it 72a7e14dcfSSatish Balay is in is opened. 73a7e14dcfSSatish Balay 74441846f8SBarry Smith This registers all of the Tao methods that are in the libtao 75a7e14dcfSSatish Balay library. 76a7e14dcfSSatish Balay 77a7e14dcfSSatish Balay Input Parameter: 78a7e14dcfSSatish Balay . path - library path 79a7e14dcfSSatish Balay */ 8060da17ecSBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void) 81a7e14dcfSSatish Balay { 82a7e14dcfSSatish Balay PetscFunctionBegin; 839566063dSJacob Faibussowitsch PetscCall(TaoInitializePackage()); 849566063dSJacob Faibussowitsch PetscCall(TaoLineSearchInitializePackage()); 85a7e14dcfSSatish Balay PetscFunctionReturn(0); 86a7e14dcfSSatish Balay } 8760da17ecSBarry Smith #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 88