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