Actual source code: dlregisksp.c

petsc-3.3-p7 2013-05-11
  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 *PCASMTypes[]       = {"NONE","RESTRICT","INTERPOLATE","BASIC","PCASMType","PC_ASM_",0};
  8: const char *PCGASMTypes[]       = {"NONE","RESTRICT","INTERPOLATE","BASIC","PCGASMType","PC_GASM_",0};
  9: const char *PCCompositeTypes[] = {"ADDITIVE","MULTIPLICATIVE","SYMMETRIC_MULTIPLICATIVE","SPECIAL","SCHUR","PCCompositeType","PC_COMPOSITE",0};
 10: const char *PCPARMSGlobalTypes[] = {"RAS","SCHUR","BJ","PCPARMSGlobalType","PC_PARMS_",0};
 11: const char *PCPARMSLocalTypes[]  = {"ILU0","ILUK","ILUT","ARMS","PCPARMSLocalType","PC_PARMS_",0};

 13: static PetscBool  PCPackageInitialized = PETSC_FALSE;
 16: /*@C
 17:   PCFinalizePackage - This function destroys everything in the Petsc interface to the characteristics package. It is
 18:   called from PetscFinalize().

 20:   Level: developer

 22: .keywords: Petsc, destroy, package, mathematica
 23: .seealso: PetscFinalize()
 24: @*/
 25: PetscErrorCode  PCFinalizePackage(void)
 26: {
 28:   PCPackageInitialized = PETSC_FALSE;
 29:   PCRegisterAllCalled  = PETSC_FALSE;
 30:   PCList               = 0;
 31:   return(0);
 32: }

 36: /*@C
 37:   PCInitializePackage - This function initializes everything in the PC package. It is called
 38:   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PCCreate()
 39:   when using static libraries.

 41:   Input Parameter:
 42:   path - The dynamic library path, or PETSC_NULL

 44:   Level: developer

 46: .keywords: PC, initialize, package
 47: .seealso: PetscInitialize()
 48: @*/
 49: PetscErrorCode  PCInitializePackage(const char path[])
 50: {
 51:   char              logList[256];
 52:   char             *className;
 53:   PetscBool         opt;
 54:   PetscErrorCode    ierr;

 57:   if (PCPackageInitialized) return(0);
 58:   PCPackageInitialized = PETSC_TRUE;
 59:   /* Register Classes */
 60:   PetscClassIdRegister("Preconditioner",&PC_CLASSID);
 61:   /* Register Constructors */
 62:   PCRegisterAll(path);
 63:   /* Register Events */
 64:   PetscLogEventRegister("PCSetUp",          PC_CLASSID,&PC_SetUp);
 65:   PetscLogEventRegister("PCSetUpOnBlocks",  PC_CLASSID,&PC_SetUpOnBlocks);
 66:   PetscLogEventRegister("PCApplyOnBlocks",  PC_CLASSID,&PC_ApplyOnBlocks);
 67:   PetscLogEventRegister("PCApplyOnMproc",   PC_CLASSID,&PC_ApplyOnMproc);
 68:   PetscLogEventRegister("PCApply",          PC_CLASSID,&PC_Apply);
 69:   PetscLogEventRegister("PCApplyCoarse",    PC_CLASSID,&PC_ApplyCoarse);
 70:   PetscLogEventRegister("PCApplyMultiple",  PC_CLASSID,&PC_ApplyMultiple);
 71:   PetscLogEventRegister("PCApplySymmLeft",  PC_CLASSID,&PC_ApplySymmetricLeft);
 72:   PetscLogEventRegister("PCApplySymmRight", PC_CLASSID,&PC_ApplySymmetricRight);
 73:   PetscLogEventRegister("PCModifySubMatri", PC_CLASSID,&PC_ModifySubMatrices);
 74:   /* Process info exclusions */
 75:   PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);
 76:   if (opt) {
 77:     PetscStrstr(logList, "pc", &className);
 78:     if (className) {
 79:       PetscInfoDeactivateClass(PC_CLASSID);
 80:     }
 81:   }
 82:   /* Process summary exclusions */
 83:   PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);
 84:   if (opt) {
 85:     PetscStrstr(logList, "pc", &className);
 86:     if (className) {
 87:       PetscLogEventDeactivateClass(PC_CLASSID);
 88:     }
 89:   }
 90:   PetscRegisterFinalize(PCFinalizePackage);
 91:   return(0);
 92: }

 94: const char *KSPCGTypes[]                  = {"SYMMETRIC","HERMITIAN","KSPCGType","KSP_CG_",0};
 95: const char *KSPGMRESCGSRefinementTypes[]  = {"REFINE_NEVER", "REFINE_IFNEEDED", "REFINE_ALWAYS","KSPGMRESRefinementType","KSP_GMRES_CGS_",0};
 96: const char *KSPNormTypes_Shifted[]        = {"DEFAULT","NONE","PRECONDITIONED","UNPRECONDITIONED","NATURAL","KSPNormType","KSP_NORM_",0};
 97: const char *const*const KSPNormTypes = KSPNormTypes_Shifted + 1;
 98: const char *KSPConvergedReasons_Shifted[] = {"DIVERGED_INDEFINITE_MAT","DIVERGED_NAN","DIVERGED_INDEFINITE_PC",
 99:                                              "DIVERGED_NONSYMMETRIC", "DIVERGED_BREAKDOWN_BICG","DIVERGED_BREAKDOWN",
100:                                              "DIVERGED_DTOL","DIVERGED_ITS","DIVERGED_NULL","","CONVERGED_ITERATING",
101:                                              "CONVERGED_RTOL_NORMAL","CONVERGED_RTOL","CONVERGED_ATOL","CONVERGED_ITS",
102:                                              "CONVERGED_CG_NEG_CURVE","CONVERGED_CG_CONSTRAINED","CONVERGED_STEP_LENGTH",
103:                                              "CONVERGED_HAPPY_BREAKDOWN","CONVERGED_ATOL_NORMAL","KSPConvergedReason","KSP_",0};
104: const char *const*KSPConvergedReasons = KSPConvergedReasons_Shifted + 10;

106: static PetscBool  KSPPackageInitialized = PETSC_FALSE;
109: /*@C
110:   KSPFinalizePackage - This function destroys everything in the Petsc interface to the KSP package. It is
111:   called from PetscFinalize().

113:   Level: developer

115: .keywords: Petsc, destroy, package, mathematica
116: .seealso: PetscFinalize()
117: @*/
118: PetscErrorCode  KSPFinalizePackage(void)
119: {
121:   KSPPackageInitialized = PETSC_FALSE;
122:   KSPList               = 0;
123:   KSPRegisterAllCalled  = PETSC_FALSE;
124:   return(0);
125: }

129: /*@C
130:   KSPInitializePackage - This function initializes everything in the KSP package. It is called
131:   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to KSPCreate()
132:   when using static libraries.

134:   Input Parameter:
135:   path - The dynamic library path, or PETSC_NULL

137:   Level: developer

139: .keywords: KSP, initialize, package
140: .seealso: PetscInitialize()
141: @*/
142: PetscErrorCode  KSPInitializePackage(const char path[])
143: {
144:   char              logList[256];
145:   char              *className;
146:   PetscBool         opt;
147:   PetscErrorCode    ierr;

150:   if (KSPPackageInitialized) return(0);
151:   KSPPackageInitialized = PETSC_TRUE;
152:   /* Register Classes */
153:   PetscClassIdRegister("Krylov Solver",&KSP_CLASSID);
154:   /* Register Constructors */
155:   KSPRegisterAll(path);
156:   /* Register Events */
157:   PetscLogEventRegister("KSPGMRESOrthog",   KSP_CLASSID,&KSP_GMRESOrthogonalization);
158:   PetscLogEventRegister("KSPSetUp",         KSP_CLASSID,&KSP_SetUp);
159:   PetscLogEventRegister("KSPSolve",         KSP_CLASSID,&KSP_Solve);
160:   /* Process info exclusions */
161:   PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);
162:   if (opt) {
163:     PetscStrstr(logList, "ksp", &className);
164:     if (className) {
165:       PetscInfoDeactivateClass(KSP_CLASSID);
166:     }
167:   }
168:   /* Process summary exclusions */
169:   PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);
170:   if (opt) {
171:     PetscStrstr(logList, "ksp", &className);
172:     if (className) {
173:       PetscLogEventDeactivateClass(KSP_CLASSID);
174:     }
175:   }
176:   PetscRegisterFinalize(KSPFinalizePackage);
177:   return(0);
178: }

180: #ifdef PETSC_USE_DYNAMIC_LIBRARIES
181: EXTERN_C_BEGIN
184: /*
185:   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.

187:   This one registers all the KSP and PC methods that are in the basic PETSc libpetscksp
188:   library.

190:   Input Parameter:
191:   path - library path
192:  */
193: PetscErrorCode  PetscDLLibraryRegister_petscksp(const char path[])
194: {

198:   PCInitializePackage(path);
199:   KSPInitializePackage(path);
200:   return(0);
201: }
202: EXTERN_C_END

204: #endif /* PETSC_USE_DYNAMIC_LIBRARIES */