Actual source code: itcl.c

  1: #define PETSCKSP_DLL

  3: /*
  4:     Code for setting KSP options from the options database.
  5: */

 7:  #include src/ksp/ksp/kspimpl.h
 8:  #include petscsys.h

 10: /*
 11:        We retain a list of functions that also take KSP command 
 12:     line options. These are called at the end KSPSetFromOptions()
 13: */
 14: #define MAXSETFROMOPTIONS 5
 15: PetscInt numberofsetfromoptions = 0;
 16: PetscErrorCode (*othersetfromoptions[MAXSETFROMOPTIONS])(KSP) = {0};

 20: /*@C
 21:     KSPAddOptionsChecker - Adds an additional function to check for KSP options.

 23:     Not Collective

 25:     Input Parameter:
 26: .   kspcheck - function that checks for options

 28:     Level: developer

 30: .keywords: KSP, add, options, checker

 32: .seealso: KSPSetFromOptions()
 33: @*/
 34: PetscErrorCode PETSCKSP_DLLEXPORT KSPAddOptionsChecker(PetscErrorCode (*kspcheck)(KSP))
 35: {
 37:   if (numberofsetfromoptions >= MAXSETFROMOPTIONS) {
 38:     SETERRQ(PETSC_ERR_ARG_OUTOFRANGE,"Too many options checkers, only 5 allowed");
 39:   }

 41:   othersetfromoptions[numberofsetfromoptions++] = kspcheck;
 42:   return(0);
 43: }

 47: /*@C
 48:    KSPSetOptionsPrefix - Sets the prefix used for searching for all 
 49:    KSP options in the database.

 51:    Collective on KSP

 53:    Input Parameters:
 54: +  ksp - the Krylov context
 55: -  prefix - the prefix string to prepend to all KSP option requests

 57:    Notes:
 58:    A hyphen (-) must NOT be given at the beginning of the prefix name.
 59:    The first character of all runtime options is AUTOMATICALLY the
 60:    hyphen.

 62:    For example, to distinguish between the runtime options for two
 63:    different KSP contexts, one could call
 64: .vb
 65:       KSPSetOptionsPrefix(ksp1,"sys1_")
 66:       KSPSetOptionsPrefix(ksp2,"sys2_")
 67: .ve

 69:    This would enable use of different options for each system, such as
 70: .vb
 71:       -sys1_ksp_type gmres -sys1_ksp_rtol 1.e-3
 72:       -sys2_ksp_type bcgs  -sys2_ksp_rtol 1.e-4
 73: .ve

 75:    Level: advanced

 77: .keywords: KSP, set, options, prefix, database

 79: .seealso: KSPAppendOptionsPrefix(), KSPGetOptionsPrefix()
 80: @*/
 81: PetscErrorCode PETSCKSP_DLLEXPORT KSPSetOptionsPrefix(KSP ksp,const char prefix[])
 82: {
 86:   PCSetOptionsPrefix(ksp->pc,prefix);
 87:   PetscObjectSetOptionsPrefix((PetscObject)ksp,prefix);
 88:   return(0);
 89: }
 90: 
 93: /*@C
 94:    KSPAppendOptionsPrefix - Appends to the prefix used for searching for all 
 95:    KSP options in the database.

 97:    Collective on KSP

 99:    Input Parameters:
100: +  ksp - the Krylov context
101: -  prefix - the prefix string to prepend to all KSP option requests

103:    Notes:
104:    A hyphen (-) must NOT be given at the beginning of the prefix name.
105:    The first character of all runtime options is AUTOMATICALLY the hyphen.

107:    Level: advanced

109: .keywords: KSP, append, options, prefix, database

111: .seealso: KSPSetOptionsPrefix(), KSPGetOptionsPrefix()
112: @*/
113: PetscErrorCode PETSCKSP_DLLEXPORT KSPAppendOptionsPrefix(KSP ksp,const char prefix[])
114: {
118:   PCAppendOptionsPrefix(ksp->pc,prefix);
119:   PetscObjectAppendOptionsPrefix((PetscObject)ksp,prefix);
120:   return(0);
121: }

125: /*@C
126:    KSPGetOptionsPrefix - Gets the prefix used for searching for all 
127:    KSP options in the database.

129:    Not Collective

131:    Input Parameters:
132: .  ksp - the Krylov context

134:    Output Parameters:
135: .  prefix - pointer to the prefix string used is returned

137:    Notes: On the fortran side, the user should pass in a string 'prifix' of
138:    sufficient length to hold the prefix.

140:    Level: advanced

142: .keywords: KSP, set, options, prefix, database

144: .seealso: KSPSetOptionsPrefix(), KSPAppendOptionsPrefix()
145: @*/
146: PetscErrorCode PETSCKSP_DLLEXPORT KSPGetOptionsPrefix(KSP ksp,const char *prefix[])
147: {
151:   PetscObjectGetOptionsPrefix((PetscObject)ksp,prefix);
152:   return(0);
153: }

155: