Actual source code: cgtype.c


  2: #include <../src/ksp/ksp/impls/cg/cgimpl.h>

  4: /*@
  5:     KSPCGSetType - Sets the variant of the conjugate gradient method to
  6:     use for solving a linear system with a complex coefficient matrix.
  7:     This option is irrelevant when solving a real system.

  9:     Logically Collective on ksp

 11:     Input Parameters:
 12: +   ksp - the iterative context
 13: -   type - the variant of CG to use, one of
 14: .vb
 15:       KSP_CG_HERMITIAN - complex, Hermitian matrix (default)
 16:       KSP_CG_SYMMETRIC - complex, symmetric matrix
 17: .ve

 19:     Level: intermediate

 21:     Options Database Keys:
 22: +   -ksp_cg_hermitian - Indicates Hermitian matrix
 23: -   -ksp_cg_symmetric - Indicates symmetric matrix

 25:     Note:
 26:     By default, the matrix is assumed to be complex, Hermitian.

 28: .seealso: KSP, KSPCG
 29: @*/
 30: PetscErrorCode  KSPCGSetType(KSP ksp,KSPCGType type)
 31: {
 33:   PetscTryMethod(ksp,"KSPCGSetType_C",(KSP,KSPCGType),(ksp,type));
 34:   return 0;
 35: }

 37: /*@
 38:     KSPCGUseSingleReduction - Merge the two inner products needed in CG into a single MPI_Allreduce() call.

 40:     Logically Collective on ksp

 42:     Input Parameters:
 43: +   ksp - the iterative context
 44: -   flg - turn on or off the single reduction

 46:     Options Database:
 47: .   -ksp_cg_single_reduction <bool> - Merge inner products into single MPI_Allreduce

 49:     Level: intermediate

 51:      The algorithm used in this case is described as Method 1 in Lapack Working Note 56, "Conjugate Gradient Algorithms with Reduced Synchronization Overhead
 52:      Distributed Memory Multiprocessors", by E. F. D'Azevedo, V. L. Eijkhout, and C. H. Romine, December 3, 1999. V. Eijkhout credits the algorithm
 53:      initially to Chronopoulos and Gear.

 55:      It requires two extra work vectors than the conventional implementation in PETSc.

 57:      See also KSPPIPECG, KSPPIPECR, and KSPGROPPCG that use non-blocking reductions.

 59: .seealso: KSP, KSPCG, KSPGMRES
 60: @*/
 61: PetscErrorCode  KSPCGUseSingleReduction(KSP ksp,PetscBool flg)
 62: {
 65:   PetscTryMethod(ksp,"KSPCGUseSingleReduction_C",(KSP,PetscBool),(ksp,flg));
 66:   return 0;
 67: }

 69: /*@
 70:     KSPCGSetRadius - Sets the radius of the trust region.

 72:     Logically Collective on ksp

 74:     Input Parameters:
 75: +   ksp    - the iterative context
 76: -   radius - the trust region radius (Infinity is the default)

 78:     Level: advanced

 80: .seealso: KSP, KSPCG, KSPNASH, KSPSTCG, KSPGLTR
 81: @*/
 82: PetscErrorCode  KSPCGSetRadius(KSP ksp, PetscReal radius)
 83: {
 86:   PetscTryMethod(ksp,"KSPCGSetRadius_C",(KSP,PetscReal),(ksp,radius));
 87:   return 0;
 88: }

 90: /*@
 91:     KSPCGGetNormD - Got norm of the direction.

 93:     Collective on ksp

 95:     Input Parameters:
 96: +   ksp    - the iterative context
 97: -   norm_d - the norm of the direction

 99:     Level: advanced

101: .seealso: KSP, KSPCG, KSPNASH, KSPSTCG, KSPGLTR
102: @*/
103: PetscErrorCode  KSPCGGetNormD(KSP ksp, PetscReal *norm_d)
104: {
106:   PetscUseMethod(ksp,"KSPCGGetNormD_C",(KSP,PetscReal*),(ksp,norm_d));
107:   return 0;
108: }

110: /*@
111:     KSPCGGetObjFcn - Get objective function value.

113:     Collective on ksp

115:     Input Parameters:
116: +   ksp   - the iterative context
117: -   o_fcn - the objective function value

119:     Level: advanced

121: .seealso: KSP, KSPCG, KSPNASH, KSPSTCG, KSPGLTR
122: @*/
123: PetscErrorCode  KSPCGGetObjFcn(KSP ksp, PetscReal *o_fcn)
124: {
126:   PetscUseMethod(ksp,"KSPCGGetObjFcn_C",(KSP,PetscReal*),(ksp,o_fcn));
127:   return 0;
128: }