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 */