Actual source code: dlregissvd.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/svdimpl.h>
13: static PetscBool SVDPackageInitialized = PETSC_FALSE;
15: const char *SVDTRLanczosGBidiags[] = {"SINGLE","UPPER","LOWER","SVDTRLanczosGBidiag","SVD_TRLANCZOS_GBIDIAG_",NULL};
16: const char *SVDErrorTypes[] = {"ABSOLUTE","RELATIVE","SVDErrorType","SVD_ERROR_",NULL};
17: const char *SVDPRIMMEMethods[] = {"","HYBRID","NORMALEQUATIONS","AUGMENTED","SVDPRIMMEMethod","SVD_PRIMME_",NULL};
18: const char *SVDKSVDEigenMethods[] = {"","MRRR","DC","ELPA","SVDKSVDEigenMethod","SVD_KSVD_EIGEN_",NULL};
19: const char *SVDKSVDPolarMethods[] = {"","QDWH","ZOLOPD","SVDKSVDPolarMethod","SVD_KSVD_POLAR_",NULL};
20: const char *const SVDConvergedReasons_Shifted[] = {"","DIVERGED_SYMMETRY_LOST","DIVERGED_BREAKDOWN","DIVERGED_ITS","CONVERGED_ITERATING","CONVERGED_TOL","CONVERGED_USER","CONVERGED_MAXIT","SVDConvergedReason","SVD_",NULL};
21: const char *const*SVDConvergedReasons = SVDConvergedReasons_Shifted + 4;
23: /*@C
24: SVDFinalizePackage - This function destroys everything in the SLEPc interface
25: to the `SVD` package. It is called from `SlepcFinalize()`.
27: Level: developer
29: .seealso: [](ch:svd), `SlepcFinalize()`, `SVDInitializePackage()`
30: @*/
31: PetscErrorCode SVDFinalizePackage(void)
32: {
33: PetscFunctionBegin;
34: PetscCall(PetscFunctionListDestroy(&SVDList));
35: PetscCall(PetscFunctionListDestroy(&SVDMonitorList));
36: PetscCall(PetscFunctionListDestroy(&SVDMonitorCreateList));
37: PetscCall(PetscFunctionListDestroy(&SVDMonitorDestroyList));
38: SVDPackageInitialized = PETSC_FALSE;
39: SVDRegisterAllCalled = PETSC_FALSE;
40: SVDMonitorRegisterAllCalled = PETSC_FALSE;
41: PetscFunctionReturn(PETSC_SUCCESS);
42: }
44: /*@C
45: SVDInitializePackage - This function initializes everything in the `SVD` package.
46: It is called from `PetscDLLibraryRegister_slepcsvd()` when using dynamic libraries, and
47: on the first call to `SVDCreate()` when using shared or static libraries.
49: Note:
50: This function never needs to be called by SLEPc users.
52: Level: developer
54: .seealso: [](ch:svd), `SVD`, `SlepcInitialize()`, `SVDFinalizePackage()`
55: @*/
56: PetscErrorCode SVDInitializePackage(void)
57: {
58: char logList[256];
59: PetscBool opt,pkg;
60: PetscClassId classids[1];
62: PetscFunctionBegin;
63: if (SVDPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
64: SVDPackageInitialized = PETSC_TRUE;
65: /* Register Classes */
66: PetscCall(PetscClassIdRegister("SVD Solver",&SVD_CLASSID));
67: /* Register Constructors */
68: PetscCall(SVDRegisterAll());
69: /* Register Monitors */
70: PetscCall(SVDMonitorRegisterAll());
71: /* Register Events */
72: PetscCall(PetscLogEventRegister("SVDSetUp",SVD_CLASSID,&SVD_SetUp));
73: PetscCall(PetscLogEventRegister("SVDSolve",SVD_CLASSID,&SVD_Solve));
74: /* Process Info */
75: classids[0] = SVD_CLASSID;
76: PetscCall(PetscInfoProcessClass("svd",1,&classids[0]));
77: /* Process summary exclusions */
78: PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
79: if (opt) {
80: PetscCall(PetscStrInList("svd",logList,',',&pkg));
81: if (pkg) PetscCall(PetscLogEventDeactivateClass(SVD_CLASSID));
82: }
83: /* Register package finalizer */
84: PetscCall(PetscRegisterFinalize(SVDFinalizePackage));
85: PetscFunctionReturn(PETSC_SUCCESS);
86: }
88: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
89: /*
90: PetscDLLibraryRegister - This function is called when the dynamic library
91: it is in is opened.
93: This one registers all the SVD methods that are in the basic SLEPc libslepcsvd
94: library.
95: */
96: SLEPC_EXTERN PetscErrorCode PetscDLLibraryRegister_slepcsvd(void)
97: {
98: PetscFunctionBegin;
99: PetscCall(SVDInitializePackage());
100: PetscFunctionReturn(PETSC_SUCCESS);
101: }
102: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */