Actual source code: dlregisksp.c
1: #define PETSCKSP_DLL
3: #include include/private/pcimpl.h
4: #include src/ksp/ksp/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","SPECIAL","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 PETSCKSP_DLLEXPORT PCInitializePackage(const char path[]) {
27: static PetscTruth initialized = PETSC_FALSE;
28: char logList[256];
29: char *className;
30: PetscTruth opt;
34: if (initialized) return(0);
35: initialized = PETSC_TRUE;
36: /* Register Classes */
37: PetscLogClassRegister(&PC_COOKIE, "Preconditioner");
38: /* Register Constructors */
39: PCRegisterAll(path);
40: /* Register Events */
41: PetscLogEventRegister(&PC_SetUp, "PCSetUp", PC_COOKIE);
42: PetscLogEventRegister(&PC_SetUpOnBlocks, "PCSetUpOnBlocks", PC_COOKIE);
43: PetscLogEventRegister(&PC_Apply, "PCApply", PC_COOKIE);
44: PetscLogEventRegister(&PC_ApplyCoarse, "PCApplyCoarse", PC_COOKIE);
45: PetscLogEventRegister(&PC_ApplyMultiple, "PCApplyMultiple", PC_COOKIE);
46: PetscLogEventRegister(&PC_ApplySymmetricLeft, "PCApplySymmLeft", PC_COOKIE);
47: PetscLogEventRegister(&PC_ApplySymmetricRight, "PCApplySymmRight", PC_COOKIE);
48: PetscLogEventRegister(&PC_ModifySubMatrices, "PCModifySubMatri", PC_COOKIE);
49: /* Process info exclusions */
50: PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);
51: if (opt) {
52: PetscStrstr(logList, "pc", &className);
53: if (className) {
54: PetscInfoDeactivateClass(PC_COOKIE);
55: }
56: }
57: /* Process summary exclusions */
58: PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);
59: if (opt) {
60: PetscStrstr(logList, "pc", &className);
61: if (className) {
62: PetscLogEventDeactivateClass(PC_COOKIE);
63: }
64: }
65: return(0);
66: }
68: const char *KSPCGTypes[] = {"SYMMETRIC","HERMITIAN","KSPCGType","KSP_CG_",0};
69: const char *KSPGMRESCGSRefinementTypes[] = {"REFINE_NEVER", "REFINE_IFNEEDED", "REFINE_ALWAYS","KSPGMRESRefinementType","KSP_GMRES_CGS_",0};
70: const char *KSPNormTypes[] = {"NO_NORM","PRECONDITIONED_NORM","UNPRECONDITIONED_NORM","NATURAL_NORM","KSPNormType","KSP_",0};
71: const char *KSPConvergedReasons_Shifted[] = {"DIVERGED_INDEFINITE_MAT","DIVERGED_NAN","DIVERGED_INDEFINITE_PC",
72: "DIVERGED_NONSYMMETRIC", "DIVERGED_BREAKDOWN_BICG","DIVERGED_BREAKDOWN",
73: "DIVERGED_DTOL","DIVERGED_ITS","DIVERGED_NULL","","CONVERGED_ITERATING",
74: "","CONVERGED_RTOL","CONVERGED_ATOL","CONVERGED_ITS",
75: "CONVERGED_STCG_NEG_CURVE","CONVERGED_STCG_CONSTRAINED","CONVERGED_STEP_LENGTH",
76: "KSPConvergedReason","KSP_",0};
77: const char **KSPConvergedReasons = KSPConvergedReasons_Shifted + 10;
81: /*@C
82: KSPInitializePackage - This function initializes everything in the KSP package. It is called
83: from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to KSPCreate()
84: when using static libraries.
86: Input Parameter:
87: path - The dynamic library path, or PETSC_NULL
89: Level: developer
91: .keywords: KSP, initialize, package
92: .seealso: PetscInitialize()
93: @*/
94: PetscErrorCode PETSCKSP_DLLEXPORT KSPInitializePackage(const char path[]) {
95: static PetscTruth initialized = PETSC_FALSE;
96: char logList[256];
97: char *className;
98: PetscTruth opt;
99: PetscErrorCode ierr;
102: if (initialized) return(0);
103: initialized = PETSC_TRUE;
104: /* Register Classes */
105: PetscLogClassRegister(&KSP_COOKIE, "Krylov Solver");
106: /* Register Constructors */
107: KSPRegisterAll(path);
108: /* Register Events */
109: PetscLogEventRegister(&KSP_GMRESOrthogonalization, "KSPGMRESOrthog", KSP_COOKIE);
110: PetscLogEventRegister(&KSP_SetUp, "KSPSetup", KSP_COOKIE);
111: PetscLogEventRegister(&KSP_Solve, "KSPSolve", KSP_COOKIE);
112: /* Process info exclusions */
113: PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);
114: if (opt) {
115: PetscStrstr(logList, "ksp", &className);
116: if (className) {
117: PetscInfoDeactivateClass(KSP_COOKIE);
118: }
119: }
120: /* Process summary exclusions */
121: PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);
122: if (opt) {
123: PetscStrstr(logList, "ksp", &className);
124: if (className) {
125: PetscLogEventDeactivateClass(KSP_COOKIE);
126: }
127: }
128: return(0);
129: }
131: #ifdef PETSC_USE_DYNAMIC_LIBRARIES
135: /*
136: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
138: This one registers all the KSP and PC methods that are in the basic PETSc libpetscksp
139: library.
141: Input Parameter:
142: path - library path
143: */
144: PetscErrorCode PETSCKSP_DLLEXPORT PetscDLLibraryRegister_petscksp(char *path)
145: {
148: PetscInitializeNoArguments(); if (ierr) return 1;
151: /*
152: If we got here then PETSc was properly loaded
153: */
154: PCInitializePackage(path);
155: KSPInitializePackage(path);
156: return(0);
157: }
160: #endif /* PETSC_USE_DYNAMIC_LIBRARIES */