Actual source code: dlregismfn.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/mfnimpl.h>
13: static PetscBool MFNPackageInitialized = PETSC_FALSE;
15: const char *const MFNConvergedReasons_Shifted[] = {"DIVERGED_BREAKDOWN","DIVERGED_ITS","CONVERGED_ITERATING","CONVERGED_TOL","CONVERGED_ITS","MFNConvergedReason","MFN_",NULL};
16: const char *const*MFNConvergedReasons = MFNConvergedReasons_Shifted + 2;
18: /*@C
19: MFNFinalizePackage - This function destroys everything in the SLEPc interface
20: to the `MFN` package. It is called from `SlepcFinalize()`.
22: Level: developer
24: .seealso: [](ch:mfn), `SlepcFinalize()`, `MFNInitializePackage()`
25: @*/
26: PetscErrorCode MFNFinalizePackage(void)
27: {
28: PetscFunctionBegin;
29: PetscCall(PetscFunctionListDestroy(&MFNList));
30: PetscCall(PetscFunctionListDestroy(&MFNMonitorList));
31: PetscCall(PetscFunctionListDestroy(&MFNMonitorCreateList));
32: PetscCall(PetscFunctionListDestroy(&MFNMonitorDestroyList));
33: MFNPackageInitialized = PETSC_FALSE;
34: MFNRegisterAllCalled = PETSC_FALSE;
35: MFNMonitorRegisterAllCalled = PETSC_FALSE;
36: PetscFunctionReturn(PETSC_SUCCESS);
37: }
39: /*@C
40: MFNInitializePackage - This function initializes everything in the `MFN` package.
41: It is called from `PetscDLLibraryRegister_slepcmfn()` when using dynamic libraries, and
42: on the first call to `MFNCreate()` when using shared or static libraries.
44: Note:
45: This function never needs to be called by SLEPc users.
47: Level: developer
49: .seealso: [](ch:mfn), `MFN`, `SlepcInitialize()`, `MFNFinalizePackage()`
50: @*/
51: PetscErrorCode MFNInitializePackage(void)
52: {
53: char logList[256];
54: PetscBool opt,pkg;
55: PetscClassId classids[1];
57: PetscFunctionBegin;
58: if (MFNPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
59: MFNPackageInitialized = PETSC_TRUE;
60: /* Register Classes */
61: PetscCall(PetscClassIdRegister("Matrix Function",&MFN_CLASSID));
62: /* Register Constructors */
63: PetscCall(MFNRegisterAll());
64: /* Register Monitors */
65: PetscCall(MFNMonitorRegisterAll());
66: /* Register Events */
67: PetscCall(PetscLogEventRegister("MFNSetUp",MFN_CLASSID,&MFN_SetUp));
68: PetscCall(PetscLogEventRegister("MFNSolve",MFN_CLASSID,&MFN_Solve));
69: /* Process Info */
70: classids[0] = MFN_CLASSID;
71: PetscCall(PetscInfoProcessClass("mfn",1,&classids[0]));
72: /* Process summary exclusions */
73: PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
74: if (opt) {
75: PetscCall(PetscStrInList("mfn",logList,',',&pkg));
76: if (pkg) PetscCall(PetscLogEventDeactivateClass(MFN_CLASSID));
77: }
78: /* Register package finalizer */
79: PetscCall(PetscRegisterFinalize(MFNFinalizePackage));
80: PetscFunctionReturn(PETSC_SUCCESS);
81: }
83: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
84: /*
85: PetscDLLibraryRegister - This function is called when the dynamic library
86: it is in is opened.
88: This one registers all the MFN methods that are in the basic SLEPc libslepcmfn
89: library.
90: */
91: SLEPC_EXTERN PetscErrorCode PetscDLLibraryRegister_slepcmfn(void)
92: {
93: PetscFunctionBegin;
94: PetscCall(MFNInitializePackage());
95: PetscFunctionReturn(PETSC_SUCCESS);
96: }
97: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */