xref: /petsc/src/snes/interface/dlregissnes.c (revision 1153da110c132807661d1701eed1b4f23dada5ea)
1*1153da11SBarry Smith #define PETSCSNES_DLL
2*1153da11SBarry Smith 
3*1153da11SBarry Smith #include "petscsnes.h"
4*1153da11SBarry Smith 
5*1153da11SBarry Smith #undef __FUNCT__
6*1153da11SBarry Smith #define __FUNCT__ "SNESInitializePackage"
7*1153da11SBarry Smith /*@C
8*1153da11SBarry Smith   SNESInitializePackage - This function initializes everything in the SNES package. It is called
9*1153da11SBarry Smith   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to SNESCreate()
10*1153da11SBarry Smith   when using static libraries.
11*1153da11SBarry Smith 
12*1153da11SBarry Smith   Input Parameter:
13*1153da11SBarry Smith   path - The dynamic library path, or PETSC_NULL
14*1153da11SBarry Smith 
15*1153da11SBarry Smith   Level: developer
16*1153da11SBarry Smith 
17*1153da11SBarry Smith .keywords: SNES, initialize, package
18*1153da11SBarry Smith .seealso: PetscInitialize()
19*1153da11SBarry Smith @*/
20*1153da11SBarry Smith PetscErrorCode PETSCSNES_DLLEXPORT SNESInitializePackage(const char path[]) {
21*1153da11SBarry Smith   static PetscTruth initialized = PETSC_FALSE;
22*1153da11SBarry Smith   char              logList[256];
23*1153da11SBarry Smith   char              *className;
24*1153da11SBarry Smith   PetscTruth        opt;
25*1153da11SBarry Smith   PetscErrorCode    ierr;
26*1153da11SBarry Smith 
27*1153da11SBarry Smith   PetscFunctionBegin;
28*1153da11SBarry Smith   if (initialized) PetscFunctionReturn(0);
29*1153da11SBarry Smith   initialized = PETSC_TRUE;
30*1153da11SBarry Smith   /* Register Classes */
31*1153da11SBarry Smith   ierr = PetscLogClassRegister(&SNES_COOKIE,         "SNES");CHKERRQ(ierr);
32*1153da11SBarry Smith   ierr = PetscLogClassRegister(&MATSNESMFCTX_COOKIE, "MatSNESMFCtx");CHKERRQ(ierr);
33*1153da11SBarry Smith   /* Register Constructors */
34*1153da11SBarry Smith   ierr = SNESRegisterAll(path);CHKERRQ(ierr);
35*1153da11SBarry Smith   /* Register Events */
36*1153da11SBarry Smith   ierr = PetscLogEventRegister(&SNES_Solve,                    "SNESSolve",        SNES_COOKIE);CHKERRQ(ierr);
37*1153da11SBarry Smith   ierr = PetscLogEventRegister(&SNES_LineSearch,               "SNESLineSearch",   SNES_COOKIE);CHKERRQ(ierr);
38*1153da11SBarry Smith   ierr = PetscLogEventRegister(&SNES_FunctionEval,             "SNESFunctionEval", SNES_COOKIE);CHKERRQ(ierr);
39*1153da11SBarry Smith   ierr = PetscLogEventRegister(&SNES_JacobianEval,             "SNESJacobianEval", SNES_COOKIE);CHKERRQ(ierr);
40*1153da11SBarry Smith   ierr = PetscLogEventRegister(&MATSNESMF_Mult,                "MatMultMatrixFre", MAT_COOKIE);CHKERRQ(ierr);
41*1153da11SBarry Smith   /* Process info exclusions */
42*1153da11SBarry Smith   ierr = PetscOptionsGetString(PETSC_NULL, "-log_info_exclude", logList, 256, &opt);CHKERRQ(ierr);
43*1153da11SBarry Smith   if (opt) {
44*1153da11SBarry Smith     ierr = PetscStrstr(logList, "snes", &className);CHKERRQ(ierr);
45*1153da11SBarry Smith     if (className) {
46*1153da11SBarry Smith       ierr = PetscLogInfoDeactivateClass(SNES_COOKIE);CHKERRQ(ierr);
47*1153da11SBarry Smith     }
48*1153da11SBarry Smith   }
49*1153da11SBarry Smith   /* Process summary exclusions */
50*1153da11SBarry Smith   ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
51*1153da11SBarry Smith   if (opt) {
52*1153da11SBarry Smith     ierr = PetscStrstr(logList, "snes", &className);CHKERRQ(ierr);
53*1153da11SBarry Smith     if (className) {
54*1153da11SBarry Smith       ierr = PetscLogEventDeactivateClass(SNES_COOKIE);CHKERRQ(ierr);
55*1153da11SBarry Smith     }
56*1153da11SBarry Smith   }
57*1153da11SBarry Smith   PetscFunctionReturn(0);
58*1153da11SBarry Smith }
59*1153da11SBarry Smith 
60*1153da11SBarry Smith #ifdef PETSC_USE_DYNAMIC_LIBRARIES
61*1153da11SBarry Smith EXTERN_C_BEGIN
62*1153da11SBarry Smith #undef __FUNCT__
63*1153da11SBarry Smith #define __FUNCT__ "PetscDLLibraryRegister_petscsnes"
64*1153da11SBarry Smith /*
65*1153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
66*1153da11SBarry Smith 
67*1153da11SBarry Smith   This registers all of the SNES methods that are in the basic PETSc libpetscsnes library.
68*1153da11SBarry Smith 
69*1153da11SBarry Smith   Input Parameter:
70*1153da11SBarry Smith   path - library path
71*1153da11SBarry Smith 
72*1153da11SBarry Smith  */
73*1153da11SBarry Smith PetscErrorCode PETSCSNES_DLLEXPORT PetscDLLibraryRegister_petscsnes(char *path)
74*1153da11SBarry Smith {
75*1153da11SBarry Smith   PetscErrorCode ierr;
76*1153da11SBarry Smith 
77*1153da11SBarry Smith   ierr = PetscInitializeNoArguments(); if (ierr) return 1;
78*1153da11SBarry Smith   PetscFunctionBegin;
79*1153da11SBarry Smith   /*
80*1153da11SBarry Smith       If we got here then PETSc was properly loaded
81*1153da11SBarry Smith   */
82*1153da11SBarry Smith   ierr = SNESInitializePackage(path);CHKERRQ(ierr);
83*1153da11SBarry Smith   PetscFunctionReturn(0);
84*1153da11SBarry Smith }
85*1153da11SBarry Smith EXTERN_C_END
86*1153da11SBarry Smith 
87*1153da11SBarry Smith /* --------------------------------------------------------------------------*/
88*1153da11SBarry Smith static const char *contents = "PETSc nonlinear solver library. \n\
89*1153da11SBarry Smith      line search Newton methods\n\
90*1153da11SBarry Smith      trust region Newton methods\n";
91*1153da11SBarry Smith static const char *authors  = PETSC_AUTHOR_INFO;
92*1153da11SBarry Smith 
93*1153da11SBarry Smith 
94*1153da11SBarry Smith #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
95