1af0996ceSBarry Smith #include <petsc/private/snesimpl.h> 2af0996ceSBarry Smith #include <petsc/private/linesearchimpl.h> 33a336bb1SMatthew G. Knepley #include <petsc/private/dmadaptorimpl.h> 41153da11SBarry Smith 5ace3abfcSBarry Smith static PetscBool SNESPackageInitialized = PETSC_FALSE; 6bf7f4e0aSPeter Brune 7b022a5c1SBarry Smith /*@C 8420bcc1bSBarry Smith SNESFinalizePackage - This function destroys everything in the PETSc interface to the `SNES` package. It is 9dc4c0fb0SBarry Smith called from `PetscFinalize()`. 10b022a5c1SBarry Smith 11b022a5c1SBarry Smith Level: developer 12b022a5c1SBarry Smith 13420bcc1bSBarry Smith .seealso: [](ch_snes), `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 27dc4c0fb0SBarry Smith SNESInitializePackage - This function initializes everything in the `SNES` package. It is called 28dc4c0fb0SBarry 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 33420bcc1bSBarry Smith .seealso: [](ch_snes), `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)); 493a336bb1SMatthew G. Knepley PetscCall(PetscClassIdRegister("DM Adaptor", &DMADAPTOR_CLASSID)); 501153da11SBarry Smith /* Register Constructors */ 519566063dSJacob Faibussowitsch PetscCall(SNESRegisterAll()); 529566063dSJacob Faibussowitsch PetscCall(SNESLineSearchRegisterAll()); 533a336bb1SMatthew G. Knepley PetscCall(DMAdaptorRegisterAll()); 543a336bb1SMatthew G. Knepley PetscCall(PetscRegisterFinalize(DMAdaptorRegisterDestroy)); 558b724c91SMatthew G. Knepley PetscCall(DMAdaptorMonitorRegisterAll()); 568b724c91SMatthew G. Knepley PetscCall(PetscRegisterFinalize(DMAdaptorMonitorRegisterDestroy)); 571153da11SBarry Smith /* Register Events */ 589566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESSolve", SNES_CLASSID, &SNES_Solve)); 59fc8bc0e3SRichard Tran Mills PetscCall(PetscLogEventRegister("SNESSetUp", SNES_CLASSID, &SNES_SetUp)); 609566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESFunctionEval", SNES_CLASSID, &SNES_FunctionEval)); 619566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESObjectiveEval", SNES_CLASSID, &SNES_ObjectiveEval)); 629566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNGSEval", SNES_CLASSID, &SNES_NGSEval)); 639566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNGSFuncEval", SNES_CLASSID, &SNES_NGSFuncEval)); 64*97276fddSZach Atkins PetscCall(PetscLogEventRegister("SNESNewtonALEval", SNES_CLASSID, &SNES_NewtonALEval)); 659566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESJacobianEval", SNES_CLASSID, &SNES_JacobianEval)); 669566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESNPCSolve", SNES_CLASSID, &SNES_NPCSolve)); 679566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SNESLineSearch", SNESLINESEARCH_CLASSID, &SNESLINESEARCH_Apply)); 68e94e781bSJacob Faibussowitsch /* Process Info */ 69e94e781bSJacob Faibussowitsch { 70e94e781bSJacob Faibussowitsch PetscClassId classids[3]; 71e94e781bSJacob Faibussowitsch 72e94e781bSJacob Faibussowitsch classids[0] = SNES_CLASSID; 73e94e781bSJacob Faibussowitsch classids[1] = DMSNES_CLASSID; 74e94e781bSJacob Faibussowitsch classids[2] = SNESLINESEARCH_CLASSID; 759566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("snes", 1, classids)); 769566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("dm", 1, &classids[1])); 779566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("sneslinesearch", 1, &classids[2])); 781153da11SBarry Smith } 791153da11SBarry Smith /* Process summary exclusions */ 809566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 811153da11SBarry Smith if (opt) { 829566063dSJacob Faibussowitsch PetscCall(PetscStrInList("snes", logList, ',', &pkg)); 839566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(SNES_CLASSID)); 849566063dSJacob Faibussowitsch PetscCall(PetscStrInList("dm", logList, ',', &cls)); 859566063dSJacob Faibussowitsch if (pkg || cls) PetscCall(PetscLogEventExcludeClass(DMSNES_CLASSID)); 869566063dSJacob Faibussowitsch PetscCall(PetscStrInList("sneslinesearch", logList, ',', &cls)); 879566063dSJacob Faibussowitsch if (pkg || cls) PetscCall(PetscLogEventExcludeClass(SNESLINESEARCH_CLASSID)); 881153da11SBarry Smith } 898e81d068SLisandro Dalcin /* Register package finalizer */ 909566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(SNESFinalizePackage)); 913ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 921153da11SBarry Smith } 931153da11SBarry Smith 94aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 951153da11SBarry Smith /* 961153da11SBarry Smith PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 971153da11SBarry Smith 981153da11SBarry Smith This registers all of the SNES methods that are in the basic PETSc libpetscsnes library. 991153da11SBarry Smith 1001153da11SBarry Smith */ 101d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void) 102d71ae5a4SJacob Faibussowitsch { 1031153da11SBarry Smith PetscFunctionBegin; 1049566063dSJacob Faibussowitsch PetscCall(SNESInitializePackage()); 1053ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1061153da11SBarry Smith } 1071153da11SBarry Smith 108aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 109