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