xref: /petsc/src/snes/interface/dlregissnes.c (revision dc4c0fb0d12fea86f250fc6da7e50c6579cf47ac)
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