Actual source code: dlregispep.c
1: /*
2: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3: SLEPc - Scalable Library for Eigenvalue Problem Computations
4: Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
6: This file is part of SLEPc.
7: SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9: */
11: #include <slepc/private/pepimpl.h>
13: static PetscBool PEPPackageInitialized = PETSC_FALSE;
15: const char *PEPBasisTypes[] = {"MONOMIAL","CHEBYSHEV1","CHEBYSHEV2","LEGENDRE","LAGUERRE","HERMITE","PEPBasis","PEP_BASIS_",NULL};
16: const char *PEPScaleTypes[] = {"NONE","SCALAR","DIAGONAL","BOTH","PEPScale","PEP_SCALE_",NULL};
17: const char *PEPRefineTypes[] = {"NONE","SIMPLE","MULTIPLE","PEPRefine","PEP_REFINE_",NULL};
18: const char *PEPRefineSchemes[] = {"","SCHUR","MBE","EXPLICIT","PEPRefineScheme","PEP_REFINE_SCHEME_",NULL};
19: const char *PEPExtractTypes[] = {"","NONE","NORM","RESIDUAL","STRUCTURED","PEPExtract","PEP_EXTRACT_",NULL};
20: const char *PEPErrorTypes[] = {"ABSOLUTE","RELATIVE","BACKWARD","PEPErrorType","PEP_ERROR_",NULL};
21: const char *const PEPConvergedReasons_Shifted[] = {"","DIVERGED_SYMMETRY_LOST","DIVERGED_BREAKDOWN","DIVERGED_ITS","CONVERGED_ITERATING","CONVERGED_TOL","CONVERGED_USER","PEPConvergedReason","PEP_",NULL};
22: const char *const*PEPConvergedReasons = PEPConvergedReasons_Shifted + 4;
23: const char *PEPJDProjectionTypes[] = {"HARMONIC","ORTHOGONAL","PEPJDProjection","PEP_JD_PROJECTION_",NULL};
24: const char *PEPCISSExtractions[] = {"RITZ","HANKEL","CAA","PEPCISSExtraction","PEP_CISS_EXTRACTION_",NULL};
26: /*@C
27: PEPFinalizePackage - This function destroys everything in the SLEPc interface
28: to the `PEP` package. It is called from `SlepcFinalize()`.
30: Level: developer
32: .seealso: [](ch:pep), `SlepcFinalize()`, `PEPInitializePackage()`
33: @*/
34: PetscErrorCode PEPFinalizePackage(void)
35: {
36: PetscFunctionBegin;
37: PetscCall(PetscFunctionListDestroy(&PEPList));
38: PetscCall(PetscFunctionListDestroy(&PEPMonitorList));
39: PetscCall(PetscFunctionListDestroy(&PEPMonitorCreateList));
40: PetscCall(PetscFunctionListDestroy(&PEPMonitorDestroyList));
41: PEPPackageInitialized = PETSC_FALSE;
42: PEPRegisterAllCalled = PETSC_FALSE;
43: PEPMonitorRegisterAllCalled = PETSC_FALSE;
44: PetscFunctionReturn(PETSC_SUCCESS);
45: }
47: /*@C
48: PEPInitializePackage - This function initializes everything in the `PEP` package.
49: It is called from `PetscDLLibraryRegister_slepcpep()` when using dynamic libraries, and
50: on the first call to `PEPCreate()` when using shared or static libraries.
52: Note:
53: This function never needs to be called by SLEPc users.
55: Level: developer
57: .seealso: [](ch:pep), `PEP`, `SlepcInitialize()`, `PEPFinalizePackage()`
58: @*/
59: PetscErrorCode PEPInitializePackage(void)
60: {
61: char logList[256];
62: PetscBool opt,pkg;
63: PetscClassId classids[1];
65: PetscFunctionBegin;
66: if (PEPPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
67: PEPPackageInitialized = PETSC_TRUE;
68: /* Register Classes */
69: PetscCall(PetscClassIdRegister("PEP Solver",&PEP_CLASSID));
70: /* Register Constructors */
71: PetscCall(PEPRegisterAll());
72: /* Register Monitors */
73: PetscCall(PEPMonitorRegisterAll());
74: /* Register Events */
75: PetscCall(PetscLogEventRegister("PEPSetUp",PEP_CLASSID,&PEP_SetUp));
76: PetscCall(PetscLogEventRegister("PEPSolve",PEP_CLASSID,&PEP_Solve));
77: PetscCall(PetscLogEventRegister("PEPRefine",PEP_CLASSID,&PEP_Refine));
78: PetscCall(PetscLogEventRegister("PEPCISS_SVD",PEP_CLASSID,&PEP_CISS_SVD));
79: /* Process Info */
80: classids[0] = PEP_CLASSID;
81: PetscCall(PetscInfoProcessClass("pep",1,&classids[0]));
82: /* Process summary exclusions */
83: PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
84: if (opt) {
85: PetscCall(PetscStrInList("pep",logList,',',&pkg));
86: if (pkg) PetscCall(PetscLogEventDeactivateClass(PEP_CLASSID));
87: }
88: /* Register package finalizer */
89: PetscCall(PetscRegisterFinalize(PEPFinalizePackage));
90: PetscFunctionReturn(PETSC_SUCCESS);
91: }
93: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
94: /*
95: PetscDLLibraryRegister - This function is called when the dynamic library
96: it is in is opened.
98: This one registers all the PEP methods that are in the basic SLEPc libslepcpep
99: library.
100: */
101: SLEPC_EXTERN PetscErrorCode PetscDLLibraryRegister_slepcpep(void)
102: {
103: PetscFunctionBegin;
104: PetscCall(PEPInitializePackage());
105: PetscFunctionReturn(PETSC_SUCCESS);
106: }
107: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */