Actual source code: dlregissvd.c
slepc-main 2024-12-17
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: SlepcFinalize()
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() when using dynamic libraries, and
47: on the first call to SVDCreate() when using static libraries.
49: Level: developer
51: .seealso: SlepcInitialize()
52: @*/
53: PetscErrorCode SVDInitializePackage(void)
54: {
55: char logList[256];
56: PetscBool opt,pkg;
57: PetscClassId classids[1];
59: PetscFunctionBegin;
60: if (SVDPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
61: SVDPackageInitialized = PETSC_TRUE;
62: /* Register Classes */
63: PetscCall(PetscClassIdRegister("SVD Solver",&SVD_CLASSID));
64: /* Register Constructors */
65: PetscCall(SVDRegisterAll());
66: /* Register Monitors */
67: PetscCall(SVDMonitorRegisterAll());
68: /* Register Events */
69: PetscCall(PetscLogEventRegister("SVDSetUp",SVD_CLASSID,&SVD_SetUp));
70: PetscCall(PetscLogEventRegister("SVDSolve",SVD_CLASSID,&SVD_Solve));
71: /* Process Info */
72: classids[0] = SVD_CLASSID;
73: PetscCall(PetscInfoProcessClass("svd",1,&classids[0]));
74: /* Process summary exclusions */
75: PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
76: if (opt) {
77: PetscCall(PetscStrInList("svd",logList,',',&pkg));
78: if (pkg) PetscCall(PetscLogEventDeactivateClass(SVD_CLASSID));
79: }
80: /* Register package finalizer */
81: PetscCall(PetscRegisterFinalize(SVDFinalizePackage));
82: PetscFunctionReturn(PETSC_SUCCESS);
83: }
85: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
86: /*
87: PetscDLLibraryRegister - This function is called when the dynamic library
88: it is in is opened.
90: This one registers all the SVD methods that are in the basic SLEPc libslepcsvd
91: library.
92: */
93: SLEPC_EXTERN PetscErrorCode PetscDLLibraryRegister_slepcsvd(void)
94: {
95: PetscFunctionBegin;
96: PetscCall(SVDInitializePackage());
97: PetscFunctionReturn(PETSC_SUCCESS);
98: }
99: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */