Actual source code: dlregisksp.c
petsc-3.7.5 2017-01-01
2: #include <petsc/private/pcimpl.h>
3: #include <petsc/private/kspimpl.h>
5: static const char *const PCSides_Shifted[] = {"DEFAULT","LEFT","RIGHT","SYMMETRIC","PCSide","PC_",0};
6: const char *const *const PCSides = PCSides_Shifted + 1;
7: const char *const PCASMTypes[] = {"NONE","RESTRICT","INTERPOLATE","BASIC","PCASMType","PC_ASM_",0};
8: const char *const PCGASMTypes[] = {"NONE","RESTRICT","INTERPOLATE","BASIC","PCGASMType","PC_GASM_",0};
9: const char *const PCCompositeTypes[] = {"ADDITIVE","MULTIPLICATIVE","SYMMETRIC_MULTIPLICATIVE","SPECIAL","SCHUR","PCCompositeType","PC_COMPOSITE",0};
10: const char *const PCPARMSGlobalTypes[] = {"RAS","SCHUR","BJ","PCPARMSGlobalType","PC_PARMS_",0};
11: const char *const PCPARMSLocalTypes[] = {"ILU0","ILUK","ILUT","ARMS","PCPARMSLocalType","PC_PARMS_",0};
13: const char *const PCFailedReasons[] = {"FACTOR_NOERROR","FACTOR_STRUCT_ZEROPIVOT","FACTOR_NUMERIC_ZEROPIVOT","FACTOR_OUTMEMORY","FACTOR_OTHER","SUBPC_ERROR",0};
15: static PetscBool PCPackageInitialized = PETSC_FALSE;
18: /*@C
19: PCFinalizePackage - This function destroys everything in the Petsc interface to the characteristics package. It is
20: called from PetscFinalize().
22: Level: developer
24: .keywords: Petsc, destroy, package, mathematica
25: .seealso: PetscFinalize()
26: @*/
27: PetscErrorCode PCFinalizePackage(void)
28: {
32: PetscFunctionListDestroy(&PCList);
33: PCPackageInitialized = PETSC_FALSE;
34: PCRegisterAllCalled = PETSC_FALSE;
35: return(0);
36: }
40: /*@C
41: PCInitializePackage - This function initializes everything in the PC package. It is called
42: from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PCCreate()
43: when using static libraries.
45: Level: developer
47: .keywords: PC, initialize, package
48: .seealso: PetscInitialize()
49: @*/
50: PetscErrorCode PCInitializePackage(void)
51: {
52: char logList[256];
53: char *className;
54: PetscBool opt;
58: if (PCPackageInitialized) return(0);
59: PCPackageInitialized = PETSC_TRUE;
60: /* Initialize subpackages */
61: PCGAMGInitializePackage();
62: /* Register Classes */
63: PetscClassIdRegister("Preconditioner",&PC_CLASSID);
64: /* Register Constructors */
65: PCRegisterAll();
66: /* Register Events */
67: PetscLogEventRegister("PCSetUp", PC_CLASSID,&PC_SetUp);
68: PetscLogEventRegister("PCSetUpOnBlocks", PC_CLASSID,&PC_SetUpOnBlocks);
69: PetscLogEventRegister("PCApplyOnBlocks", PC_CLASSID,&PC_ApplyOnBlocks);
70: PetscLogEventRegister("PCApplyOnMproc", PC_CLASSID,&PC_ApplyOnMproc);
71: PetscLogEventRegister("PCApply", PC_CLASSID,&PC_Apply);
72: PetscLogEventRegister("PCApplyCoarse", PC_CLASSID,&PC_ApplyCoarse);
73: PetscLogEventRegister("PCApplyMultiple", PC_CLASSID,&PC_ApplyMultiple);
74: PetscLogEventRegister("PCApplySymmLeft", PC_CLASSID,&PC_ApplySymmetricLeft);
75: PetscLogEventRegister("PCApplySymmRight", PC_CLASSID,&PC_ApplySymmetricRight);
76: PetscLogEventRegister("PCModifySubMatri", PC_CLASSID,&PC_ModifySubMatrices);
78: PetscLogEventRegister("KSPSolve_FS_0", KSP_CLASSID,&KSP_Solve_FS_0);
79: PetscLogEventRegister("KSPSolve_FS_1", KSP_CLASSID,&KSP_Solve_FS_1);
80: PetscLogEventRegister("KSPSolve_FS_2", KSP_CLASSID,&KSP_Solve_FS_2);
81: PetscLogEventRegister("KSPSolve_FS_3", KSP_CLASSID,&KSP_Solve_FS_3);
82: PetscLogEventRegister("KSPSolve_FS_4", KSP_CLASSID,&KSP_Solve_FS_4);
83: PetscLogEventRegister("KSPSolve_FS_Schu", KSP_CLASSID,&KSP_Solve_FS_S);
84: PetscLogEventRegister("KSPSolve_FS_Up", KSP_CLASSID,&KSP_Solve_FS_U);
85: PetscLogEventRegister("KSPSolve_FS_Low", KSP_CLASSID,&KSP_Solve_FS_L);
87: /* Process info exclusions */
88: PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);
89: if (opt) {
90: PetscStrstr(logList, "pc", &className);
91: if (className) {
92: PetscInfoDeactivateClass(PC_CLASSID);
93: }
94: }
95: /* Process summary exclusions */
96: PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);
97: if (opt) {
98: PetscStrstr(logList, "pc", &className);
99: if (className) {
100: PetscLogEventDeactivateClass(PC_CLASSID);
101: }
102: }
103: /* Register data */
104: PetscObjectComposedDataRegister(&PetscMGLevelId);
105: PetscRegisterFinalize(PCFinalizePackage);
106: return(0);
107: }
109: const char *const KSPCGTypes[] = {"SYMMETRIC","HERMITIAN","KSPCGType","KSP_CG_",0};
110: const char *const KSPGMRESCGSRefinementTypes[] = {"REFINE_NEVER", "REFINE_IFNEEDED", "REFINE_ALWAYS","KSPGMRESRefinementType","KSP_GMRES_CGS_",0};
111: const char *const KSPNormTypes_Shifted[] = {"DEFAULT","NONE","PRECONDITIONED","UNPRECONDITIONED","NATURAL","KSPNormType","KSP_NORM_",0};
112: const char *const*const KSPNormTypes = KSPNormTypes_Shifted + 1;
113: const char *const KSPConvergedReasons_Shifted[] = {"DIVERGED_PCSETUP_FAILED","DIVERGED_INDEFINITE_MAT","DIVERGED_NANORINF","DIVERGED_INDEFINITE_PC",
114: "DIVERGED_NONSYMMETRIC", "DIVERGED_BREAKDOWN_BICG","DIVERGED_BREAKDOWN",
115: "DIVERGED_DTOL","DIVERGED_ITS","DIVERGED_NULL","","CONVERGED_ITERATING",
116: "CONVERGED_RTOL_NORMAL","CONVERGED_RTOL","CONVERGED_ATOL","CONVERGED_ITS",
117: "CONVERGED_CG_NEG_CURVE","CONVERGED_CG_CONSTRAINED","CONVERGED_STEP_LENGTH",
118: "CONVERGED_HAPPY_BREAKDOWN","CONVERGED_ATOL_NORMAL","KSPConvergedReason","KSP_",0};
119: const char *const*KSPConvergedReasons = KSPConvergedReasons_Shifted + 11;
120: const char *const KSPFCDTruncationTypes[] = {"STANDARD","NOTAY","KSPFCDTruncationTypes","KSP_FCD_TRUNC_TYPE_",0};
122: static PetscBool KSPPackageInitialized = PETSC_FALSE;
125: /*@C
126: KSPFinalizePackage - This function destroys everything in the Petsc interface to the KSP package. It is
127: called from PetscFinalize().
129: Level: developer
131: .keywords: Petsc, destroy, package, mathematica
132: .seealso: PetscFinalize()
133: @*/
134: PetscErrorCode KSPFinalizePackage(void)
135: {
139: PetscFunctionListDestroy(&KSPList);
140: KSPPackageInitialized = PETSC_FALSE;
141: KSPRegisterAllCalled = PETSC_FALSE;
142: return(0);
143: }
147: /*@C
148: KSPInitializePackage - This function initializes everything in the KSP package. It is called
149: from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to KSPCreate()
150: when using static libraries.
152: Level: developer
154: .keywords: KSP, initialize, package
155: .seealso: PetscInitialize()
156: @*/
157: PetscErrorCode KSPInitializePackage(void)
158: {
159: char logList[256];
160: char *className;
161: PetscBool opt;
165: if (KSPPackageInitialized) return(0);
166: KSPPackageInitialized = PETSC_TRUE;
167: /* Register Classes */
168: PetscClassIdRegister("Krylov Solver",&KSP_CLASSID);
169: PetscClassIdRegister("DMKSP interface",&DMKSP_CLASSID);
170: /* Register Constructors */
171: KSPRegisterAll();
172: /* Register matrix implementations packaged in KSP */
173: KSPMatRegisterAll();
174: /* Register Events */
175: PetscLogEventRegister("KSPGMRESOrthog", KSP_CLASSID,&KSP_GMRESOrthogonalization);
176: PetscLogEventRegister("KSPSetUp", KSP_CLASSID,&KSP_SetUp);
177: PetscLogEventRegister("KSPSolve", KSP_CLASSID,&KSP_Solve);
178:
179: /* Process info exclusions */
180: PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);
181: if (opt) {
182: PetscStrstr(logList, "ksp", &className);
183: if (className) {
184: PetscInfoDeactivateClass(KSP_CLASSID);
185: }
186: }
187: /* Process summary exclusions */
188: PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);
189: if (opt) {
190: PetscStrstr(logList, "ksp", &className);
191: if (className) {
192: PetscLogEventDeactivateClass(KSP_CLASSID);
193: }
194: }
195: PetscRegisterFinalize(KSPFinalizePackage);
196: return(0);
197: }
199: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
203: /*
204: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
206: This one registers all the KSP and PC methods that are in the basic PETSc libpetscksp
207: library.
209: */
210: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscksp(void)
211: {
215: PCInitializePackage();
216: KSPInitializePackage();
217: return(0);
218: }
220: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */