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