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 8*dc4c0fb0SBarry Smith SNESFinalizePackage - This function destroys everything in the Petsc interface to the `SNES` package. It is 9*dc4c0fb0SBarry Smith called from `PetscFinalize()`. 10b022a5c1SBarry Smith 11b022a5c1SBarry Smith Level: developer 12b022a5c1SBarry Smith 13*dc4c0fb0SBarry Smith .seealso: `SNES`, `PetscFinalize()` 14b022a5c1SBarry Smith @*/ 15d71ae5a4SJacob Faibussowitsch PetscErrorCode SNESFinalizePackage(void) 16d71ae5a4SJacob Faibussowitsch { 17b022a5c1SBarry Smith PetscFunctionBegin; 189566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&SNESList)); 199566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&SNESLineSearchList)); 20b022a5c1SBarry Smith SNESPackageInitialized = PETSC_FALSE; 21b022a5c1SBarry Smith SNESRegisterAllCalled = PETSC_FALSE; 22a95a41ebSToby Isaac SNESLineSearchRegisterAllCalled = PETSC_FALSE; 233ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 24b022a5c1SBarry Smith } 25b022a5c1SBarry Smith 261153da11SBarry Smith /*@C 27*dc4c0fb0SBarry Smith SNESInitializePackage - This function initializes everything in the `SNES` package. It is called 28*dc4c0fb0SBarry 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 33*dc4c0fb0SBarry Smith .seealso: `SNES`, `PetscInitialize()` 341153da11SBarry Smith @*/ 35d71ae5a4SJacob Faibussowitsch PetscErrorCode SNESInitializePackage(void) 36d71ae5a4SJacob Faibussowitsch { 371153da11SBarry Smith char logList[256]; 388e81d068SLisandro Dalcin PetscBool opt, pkg, cls; 391153da11SBarry Smith 401153da11SBarry Smith PetscFunctionBegin; 413ba16761SJacob Faibussowitsch if (SNESPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 42b022a5c1SBarry Smith SNESPackageInitialized = PETSC_TRUE; 4337e1895aSJed Brown /* Initialize subpackages */ 449566063dSJacob Faibussowitsch PetscCall(SNESMSInitializePackage()); 451153da11SBarry Smith /* Register Classes */ 469566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("SNES", &SNES_CLASSID)); 479566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("DMSNES", &DMSNES_CLASSID)); 489566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("SNESLineSearch", &SNESLINESEARCH_CLASSID)); 491153da11SBarry Smith /* Register Constructors */ 509566063dSJacob Faibussowitsch PetscCall(SNESRegisterAll()); 519566063dSJacob Faibussowitsch PetscCall(SNESLineSearchRegisterAll()); 521153da11SBarry Smith /* Register Events */ 539566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESSolve", SNES_CLASSID, &SNES_Solve)); 54fc8bc0e3SRichard Tran Mills PetscCall(PetscLogEventRegister("SNESSetUp", SNES_CLASSID, &SNES_SetUp)); 559566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESFunctionEval", SNES_CLASSID, &SNES_FunctionEval)); 569566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESObjectiveEval", SNES_CLASSID, &SNES_ObjectiveEval)); 579566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNGSEval", SNES_CLASSID, &SNES_NGSEval)); 589566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNGSFuncEval", SNES_CLASSID, &SNES_NGSFuncEval)); 599566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESJacobianEval", SNES_CLASSID, &SNES_JacobianEval)); 609566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNPCSolve", SNES_CLASSID, &SNES_NPCSolve)); 619566063dSJacob 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; 699566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("snes", 1, classids)); 709566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("dm", 1, &classids[1])); 719566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("sneslinesearch", 1, &classids[2])); 721153da11SBarry Smith } 731153da11SBarry Smith /* Process summary exclusions */ 749566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 751153da11SBarry Smith if (opt) { 769566063dSJacob Faibussowitsch PetscCall(PetscStrInList("snes", logList, ',', &pkg)); 779566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(SNES_CLASSID)); 789566063dSJacob Faibussowitsch PetscCall(PetscStrInList("dm", logList, ',', &cls)); 799566063dSJacob Faibussowitsch if (pkg || cls) PetscCall(PetscLogEventExcludeClass(DMSNES_CLASSID)); 809566063dSJacob Faibussowitsch PetscCall(PetscStrInList("sneslinesearch", logList, ',', &cls)); 819566063dSJacob Faibussowitsch if (pkg || cls) PetscCall(PetscLogEventExcludeClass(SNESLINESEARCH_CLASSID)); 821153da11SBarry Smith } 838e81d068SLisandro Dalcin /* Register package finalizer */ 849566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(SNESFinalizePackage)); 853ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 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 */ 95d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void) 96d71ae5a4SJacob Faibussowitsch { 971153da11SBarry Smith PetscFunctionBegin; 989566063dSJacob Faibussowitsch PetscCall(SNESInitializePackage()); 993ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1001153da11SBarry Smith } 1011153da11SBarry Smith 102aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 103