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 23a7e14dcfSSatish Balay /*@C 24441846f8SBarry Smith TaoInitializePackage - This function sets up PETSc to use the Tao 25a7e14dcfSSatish Balay package. When using static libraries, this function is called from the 26a7e14dcfSSatish Balay first entry to TaoCreate(); when using shared libraries, it is called 27a7e14dcfSSatish Balay from PetscDLLibraryRegister() 28a7e14dcfSSatish Balay 29a7e14dcfSSatish Balay Level: developer 30a7e14dcfSSatish Balay 31a7e14dcfSSatish Balay .seealso: TaoCreate() 32a7e14dcfSSatish Balay @*/ 33600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void) 34a7e14dcfSSatish Balay { 35*8e81d068SLisandro Dalcin char logList[256]; 36*8e81d068SLisandro Dalcin PetscBool opt,pkg; 37a7e14dcfSSatish Balay PetscErrorCode ierr; 38a7e14dcfSSatish Balay 39a7e14dcfSSatish Balay PetscFunctionBegin; 40a7e14dcfSSatish Balay 41a7e14dcfSSatish Balay if (TaoPackageInitialized) PetscFunctionReturn(0); 42a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_TRUE; 43*8e81d068SLisandro Dalcin /* Register Classes */ 44441846f8SBarry Smith ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr); 45*8e81d068SLisandro Dalcin /* Register Constructors */ 46441846f8SBarry Smith ierr = TaoRegisterAll();CHKERRQ(ierr); 47*8e81d068SLisandro Dalcin /* Register Events */ 48441846f8SBarry Smith ierr = PetscLogEventRegister("TaoSolve",TAO_CLASSID,&Tao_Solve);CHKERRQ(ierr); 49441846f8SBarry Smith ierr = PetscLogEventRegister("TaoObjectiveEval",TAO_CLASSID,&Tao_ObjectiveEval);CHKERRQ(ierr); 50441846f8SBarry Smith ierr = PetscLogEventRegister("TaoGradientEval",TAO_CLASSID,&Tao_GradientEval);CHKERRQ(ierr); 51441846f8SBarry Smith ierr = PetscLogEventRegister("TaoHessianEval",TAO_CLASSID,&Tao_HessianEval);CHKERRQ(ierr); 52441846f8SBarry Smith ierr = PetscLogEventRegister("TaoConstraintsEval",TAO_CLASSID,&Tao_ConstraintsEval);CHKERRQ(ierr); 53441846f8SBarry Smith ierr = PetscLogEventRegister("TaoJacobianEval",TAO_CLASSID,&Tao_JacobianEval);CHKERRQ(ierr); 54*8e81d068SLisandro Dalcin /* Process info exclusions */ 55*8e81d068SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 56*8e81d068SLisandro Dalcin if (opt) { 57*8e81d068SLisandro Dalcin ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr); 58*8e81d068SLisandro Dalcin if (pkg) {ierr = PetscInfoDeactivateClass(TAO_CLASSID);CHKERRQ(ierr);} 59*8e81d068SLisandro Dalcin } 60*8e81d068SLisandro Dalcin /* Process summary exclusions */ 61*8e81d068SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 62*8e81d068SLisandro Dalcin if (opt) { 63*8e81d068SLisandro Dalcin ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr); 64*8e81d068SLisandro Dalcin if (pkg) {ierr = PetscLogEventDeactivateClass(TAO_CLASSID);CHKERRQ(ierr);} 65*8e81d068SLisandro Dalcin } 66*8e81d068SLisandro Dalcin /* Register package finalizer */ 67a7e14dcfSSatish Balay ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr); 68a7e14dcfSSatish Balay PetscFunctionReturn(0); 69a7e14dcfSSatish Balay } 70a7e14dcfSSatish Balay 71a7e14dcfSSatish Balay #ifdef PETSC_USE_DYNAMIC_LIBRARIES 72a7e14dcfSSatish Balay /* 73a7e14dcfSSatish Balay PetscDLLibraryRegister - this function is called when the dynamic library it 74a7e14dcfSSatish Balay is in is opened. 75a7e14dcfSSatish Balay 76441846f8SBarry Smith This registers all of the Tao methods that are in the libtao 77a7e14dcfSSatish Balay library. 78a7e14dcfSSatish Balay 79a7e14dcfSSatish Balay Input Parameter: 80a7e14dcfSSatish Balay . path - library path 81a7e14dcfSSatish Balay */ 82a7e14dcfSSatish Balay 83a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_tao(void) 84a7e14dcfSSatish Balay { 85a7e14dcfSSatish Balay PetscErrorCode ierr; 86a7e14dcfSSatish Balay 87a7e14dcfSSatish Balay PetscFunctionBegin; 88a7e14dcfSSatish Balay ierr = TaoInitializePackage();CHKERRQ(ierr); 89a7e14dcfSSatish Balay ierr = TaoLineSearchInitializePackage();CHKERRQ(ierr); 90a7e14dcfSSatish Balay PetscFunctionReturn(0); 91a7e14dcfSSatish Balay } 92a7e14dcfSSatish Balay 93a7e14dcfSSatish Balay #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 94