Actual source code: dlregisksp.c
1: #define PETSCKSP_DLL
3: #include private/pcimpl.h
4: #include private/kspimpl.h
7: const char *PCSides[] = {"LEFT","RIGHT","SYMMETRIC","PCSide","PC_",0};
8: const char *PCASMTypes[] = {"NONE","RESTRICT","INTERPOLATE","BASIC","PCASMType","PC_ASM_",0};
9: const char *PCCompositeTypes[] = {"ADDITIVE","MULTIPLICATIVE","SYMMETRIC_MULTIPLICATIVE","SPECIAL","SCHUR","PCCompositeType","PC_COMPOSITE",0};
13: /*@C
14: PCInitializePackage - This function initializes everything in the PC package. It is called
15: from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PCCreate()
16: when using static libraries.
18: Input Parameter:
19: path - The dynamic library path, or PETSC_NULL
21: Level: developer
23: .keywords: PC, initialize, package
24: .seealso: PetscInitialize()
25: @*/
26: PetscErrorCode PCInitializePackage(const char path[]) {
27: static PetscTruth initialized = PETSC_FALSE;
28: char logList[256];
29: char *className;
30: PetscTruth opt;
31: PetscErrorCode ierr;
34: if (initialized) return(0);
35: initialized = PETSC_TRUE;
36: /* Register Classes */
37: PetscCookieRegister("Preconditioner",&PC_COOKIE);
38: /* Register Constructors */
39: PCRegisterAll(path);
40: /* Register Events */
41: PetscLogEventRegister("PCSetUp", PC_COOKIE,&PC_SetUp);
42: PetscLogEventRegister("PCSetUpOnBlocks", PC_COOKIE,&PC_SetUpOnBlocks);
43: PetscLogEventRegister("PCApplyOnBlocks", PC_COOKIE,&PC_ApplyOnBlocks);
44: PetscLogEventRegister("PCApply", PC_COOKIE,&PC_Apply);
45: PetscLogEventRegister("PCApplyCoarse", PC_COOKIE,&PC_ApplyCoarse);
46: PetscLogEventRegister("PCApplyMultiple", PC_COOKIE,&PC_ApplyMultiple);
47: PetscLogEventRegister("PCApplySymmLeft", PC_COOKIE,&PC_ApplySymmetricLeft);
48: PetscLogEventRegister("PCApplySymmRight", PC_COOKIE,&PC_ApplySymmetricRight);
49: PetscLogEventRegister("PCModifySubMatri", PC_COOKIE,&PC_ModifySubMatrices);
50: /* Process info exclusions */
51: PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);
52: if (opt) {
53: PetscStrstr(logList, "pc", &className);
54: if (className) {
55: PetscInfoDeactivateClass(PC_COOKIE);
56: }
57: }
58: /* Process summary exclusions */
59: PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);
60: if (opt) {
61: PetscStrstr(logList, "pc", &className);
62: if (className) {
63: PetscLogEventDeactivateClass(PC_COOKIE);
64: }
65: }
66: return(0);
67: }
69: const char *KSPCGTypes[] = {"SYMMETRIC","HERMITIAN","KSPCGType","KSP_CG_",0};
70: const char *KSPGMRESCGSRefinementTypes[] = {"REFINE_NEVER", "REFINE_IFNEEDED", "REFINE_ALWAYS","KSPGMRESRefinementType","KSP_GMRES_CGS_",0};
71: const char *KSPNormTypes[] = {"NO","PRECONDITIONED","UNPRECONDITIONED","NATURAL","KSPNormType","KSP_NORM_",0};
72: const char *KSPConvergedReasons_Shifted[] = {"DIVERGED_INDEFINITE_MAT","DIVERGED_NAN","DIVERGED_INDEFINITE_PC",
73: "DIVERGED_NONSYMMETRIC", "DIVERGED_BREAKDOWN_BICG","DIVERGED_BREAKDOWN",
74: "DIVERGED_DTOL","DIVERGED_ITS","DIVERGED_NULL","","CONVERGED_ITERATING",
75: "","CONVERGED_RTOL","CONVERGED_ATOL","CONVERGED_ITS",
76: "CONVERGED_CG_NEG_CURVE","CONVERGED_CG_CONSTRAINED","CONVERGED_STEP_LENGTH",
77: "CONVERGED_HAPPY_BREAKDOWN","KSPConvergedReason","KSP_",0};
78: const char **KSPConvergedReasons = KSPConvergedReasons_Shifted + 10;
82: /*@C
83: KSPInitializePackage - This function initializes everything in the KSP package. It is called
84: from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to KSPCreate()
85: when using static libraries.
87: Input Parameter:
88: path - The dynamic library path, or PETSC_NULL
90: Level: developer
92: .keywords: KSP, initialize, package
93: .seealso: PetscInitialize()
94: @*/
95: PetscErrorCode KSPInitializePackage(const char path[]) {
96: static PetscTruth initialized = PETSC_FALSE;
97: char logList[256];
98: char *className;
99: PetscTruth opt;
100: PetscErrorCode ierr;
103: if (initialized) return(0);
104: initialized = PETSC_TRUE;
105: /* Register Classes */
106: PetscCookieRegister("Krylov Solver",&KSP_COOKIE);
107: /* Register Constructors */
108: KSPRegisterAll(path);
109: /* Register Events */
110: PetscLogEventRegister("KSPGMRESOrthog", KSP_COOKIE,&KSP_GMRESOrthogonalization);
111: PetscLogEventRegister("KSPSetup", KSP_COOKIE,&KSP_SetUp);
112: PetscLogEventRegister("KSPSolve", KSP_COOKIE,&KSP_Solve);
113: /* Process info exclusions */
114: PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);
115: if (opt) {
116: PetscStrstr(logList, "ksp", &className);
117: if (className) {
118: PetscInfoDeactivateClass(KSP_COOKIE);
119: }
120: }
121: /* Process summary exclusions */
122: PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);
123: if (opt) {
124: PetscStrstr(logList, "ksp", &className);
125: if (className) {
126: PetscLogEventDeactivateClass(KSP_COOKIE);
127: }
128: }
129: return(0);
130: }
132: #ifdef PETSC_USE_DYNAMIC_LIBRARIES
136: /*
137: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
139: This one registers all the KSP and PC methods that are in the basic PETSc libpetscksp
140: library.
142: Input Parameter:
143: path - library path
144: */
145: PetscErrorCode PetscDLLibraryRegister_petscksp(const char path[])
146: {
149: PetscInitializeNoArguments(); if (ierr) return 1;
152: /*
153: If we got here then PETSc was properly loaded
154: */
155: PCInitializePackage(path);
156: KSPInitializePackage(path);
157: return(0);
158: }
161: #endif /* PETSC_USE_DYNAMIC_LIBRARIES */