11153da11SBarry Smith 2af0996ceSBarry Smith #include <petsc/private/snesimpl.h> 3af0996ceSBarry Smith #include <petsc/private/linesearchimpl.h> 41153da11SBarry Smith 5ace3abfcSBarry Smith static PetscBool SNESPackageInitialized = PETSC_FALSE; 6bf7f4e0aSPeter Brune 7b022a5c1SBarry Smith /*@C 860154eb2SBarry Smith SNESFinalizePackage - This function destroys everything in the Petsc interface to the SNES package. It is 9b022a5c1SBarry Smith called from PetscFinalize(). 10b022a5c1SBarry Smith 11b022a5c1SBarry Smith Level: developer 12b022a5c1SBarry Smith 13b022a5c1SBarry Smith .seealso: PetscFinalize() 14b022a5c1SBarry Smith @*/ 157087cfbeSBarry Smith PetscErrorCode SNESFinalizePackage(void) 16b022a5c1SBarry Smith { 17b022a5c1SBarry Smith PetscFunctionBegin; 18*9566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&SNESList)); 19*9566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&SNESLineSearchList)); 20b022a5c1SBarry Smith SNESPackageInitialized = PETSC_FALSE; 21b022a5c1SBarry Smith SNESRegisterAllCalled = PETSC_FALSE; 22a95a41ebSToby Isaac SNESLineSearchRegisterAllCalled = PETSC_FALSE; 23b022a5c1SBarry Smith PetscFunctionReturn(0); 24b022a5c1SBarry Smith } 25b022a5c1SBarry Smith 261153da11SBarry Smith /*@C 271153da11SBarry Smith SNESInitializePackage - This function initializes everything in the SNES package. It is called 288a690491SBarry Smith from PetscDLLibraryRegister_petscsnes() when using dynamic libraries, and on the first call to SNESCreate() 298a690491SBarry Smith when using shared or static libraries. 301153da11SBarry Smith 311153da11SBarry Smith Level: developer 321153da11SBarry Smith 331153da11SBarry Smith .seealso: PetscInitialize() 341153da11SBarry Smith @*/ 35607a6623SBarry Smith PetscErrorCode SNESInitializePackage(void) 36e5bd5246SBarry Smith { 371153da11SBarry Smith char logList[256]; 388e81d068SLisandro Dalcin PetscBool opt,pkg,cls; 391153da11SBarry Smith 401153da11SBarry Smith PetscFunctionBegin; 41b022a5c1SBarry Smith if (SNESPackageInitialized) PetscFunctionReturn(0); 42b022a5c1SBarry Smith SNESPackageInitialized = PETSC_TRUE; 4337e1895aSJed Brown /* Initialize subpackages */ 44*9566063dSJacob Faibussowitsch PetscCall(SNESMSInitializePackage()); 451153da11SBarry Smith /* Register Classes */ 46*9566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("SNES",&SNES_CLASSID)); 47*9566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("DMSNES",&DMSNES_CLASSID)); 48*9566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("SNESLineSearch",&SNESLINESEARCH_CLASSID)); 491153da11SBarry Smith /* Register Constructors */ 50*9566063dSJacob Faibussowitsch PetscCall(SNESRegisterAll()); 51*9566063dSJacob Faibussowitsch PetscCall(SNESLineSearchRegisterAll()); 521153da11SBarry Smith /* Register Events */ 53*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESSolve", SNES_CLASSID,&SNES_Solve)); 54*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESSetUp", SNES_CLASSID,&SNES_Setup)); 55*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESFunctionEval", SNES_CLASSID,&SNES_FunctionEval)); 56*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESObjectiveEval", SNES_CLASSID,&SNES_ObjectiveEval)); 57*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNGSEval", SNES_CLASSID,&SNES_NGSEval)); 58*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNGSFuncEval", SNES_CLASSID,&SNES_NGSFuncEval)); 59*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESJacobianEval", SNES_CLASSID,&SNES_JacobianEval)); 60*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNPCSolve", SNES_CLASSID,&SNES_NPCSolve)); 61*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESLineSearch", SNESLINESEARCH_CLASSID,&SNESLINESEARCH_Apply)); 62e94e781bSJacob Faibussowitsch /* Process Info */ 63e94e781bSJacob Faibussowitsch { 64e94e781bSJacob Faibussowitsch PetscClassId classids[3]; 65e94e781bSJacob Faibussowitsch 66e94e781bSJacob Faibussowitsch classids[0] = SNES_CLASSID; 67e94e781bSJacob Faibussowitsch classids[1] = DMSNES_CLASSID; 68e94e781bSJacob Faibussowitsch classids[2] = SNESLINESEARCH_CLASSID; 69*9566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("snes", 1, classids)); 70*9566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("dm", 1, &classids[1])); 71*9566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("sneslinesearch", 1, &classids[2])); 721153da11SBarry Smith } 731153da11SBarry Smith /* Process summary exclusions */ 74*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt)); 751153da11SBarry Smith if (opt) { 76*9566063dSJacob Faibussowitsch PetscCall(PetscStrInList("snes",logList,',',&pkg)); 77*9566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(SNES_CLASSID)); 78*9566063dSJacob Faibussowitsch PetscCall(PetscStrInList("dm",logList,',',&cls)); 79*9566063dSJacob Faibussowitsch if (pkg || cls) PetscCall(PetscLogEventExcludeClass(DMSNES_CLASSID)); 80*9566063dSJacob Faibussowitsch PetscCall(PetscStrInList("sneslinesearch",logList,',',&cls)); 81*9566063dSJacob Faibussowitsch if (pkg || cls) PetscCall(PetscLogEventExcludeClass(SNESLINESEARCH_CLASSID)); 821153da11SBarry Smith } 838e81d068SLisandro Dalcin /* Register package finalizer */ 84*9566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(SNESFinalizePackage)); 851153da11SBarry Smith PetscFunctionReturn(0); 861153da11SBarry Smith } 871153da11SBarry Smith 88aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 891153da11SBarry Smith /* 901153da11SBarry Smith PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 911153da11SBarry Smith 921153da11SBarry Smith This registers all of the SNES methods that are in the basic PETSc libpetscsnes library. 931153da11SBarry Smith 941153da11SBarry Smith */ 95607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void) 961153da11SBarry Smith { 971153da11SBarry Smith PetscFunctionBegin; 98*9566063dSJacob Faibussowitsch PetscCall(SNESInitializePackage()); 991153da11SBarry Smith PetscFunctionReturn(0); 1001153da11SBarry Smith } 1011153da11SBarry Smith 102aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 103