PetscErrorCode KSPSetFromOptions_LGMRES(KSP ksp) { PetscErrorCode ierr; PetscInt aug; KSP_LGMRES *lgmres = (KSP_LGMRES*) ksp->data; PetscBool flg = PETSC_FALSE; PetscFunctionBegin; ierr = KSPSetFromOptions_GMRES(ksp); CHKERRQ(ierr); ierr = PetscOptionsHead("KSP LGMRES Options"); CHKERRQ(ierr); ierr = PetscOptionsBool("-ksp_lgmres_constant","Use constant approx. space size","KSPGMRESSetConstant",flg,&flg,PETSC_NULL); CHKERRQ(ierr); if (flg) { lgmres->approx_constant = 1; } ierr = PetscOptionsInt("-ksp_lgmres_augment","Number of error approximations to augment the Krylov space with","KSPLGMRESSetAugDim",lgmres->aug_dim,&aug,&flg); CHKERRQ(ierr); if (flg) { ierr = KSPLGMRESSetAugDim(ksp,aug); CHKERRQ(ierr); } ierr = PetscOptionsTail(); CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_PGMRES(KSP ksp) { PetscErrorCode ierr; PetscFunctionBegin; ierr = KSPSetFromOptions_GMRES(ksp);CHKERRQ(ierr); ierr = PetscOptionsHead("KSP pipelined GMRES Options");CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_FGMRES(KSP ksp) { PetscErrorCode ierr; PetscBool flg; PetscFunctionBegin; ierr = KSPSetFromOptions_GMRES(ksp);CHKERRQ(ierr); ierr = PetscOptionsHead("KSP flexible GMRES Options");CHKERRQ(ierr); ierr = PetscOptionsBoolGroupBegin("-ksp_fgmres_modifypcnochange","do not vary the preconditioner","KSPFGMRESSetModifyPC",&flg);CHKERRQ(ierr); if (flg) {ierr = KSPFGMRESSetModifyPC(ksp,KSPFGMRESModifyPCNoChange,0,0);CHKERRQ(ierr);} ierr = PetscOptionsBoolGroupEnd("-ksp_fgmres_modifypcksp","vary the KSP based preconditioner","KSPFGMRESSetModifyPC",&flg);CHKERRQ(ierr); if (flg) {ierr = KSPFGMRESSetModifyPC(ksp,KSPFGMRESModifyPCKSP,0,0);CHKERRQ(ierr);} ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_PIPEFGMRES(PetscOptionItems *PetscOptionsObject,KSP ksp) { PetscErrorCode ierr; KSP_PIPEFGMRES *pipefgmres = (KSP_PIPEFGMRES*)ksp->data; PetscBool flg; PetscScalar shift; PetscFunctionBegin; ierr = KSPSetFromOptions_GMRES(PetscOptionsObject,ksp);CHKERRQ(ierr); ierr = PetscOptionsHead(PetscOptionsObject,"KSP pipelined FGMRES Options");CHKERRQ(ierr); ierr = PetscOptionsScalar("-ksp_pipefgmres_shift","shift parameter","KSPPIPEFGMRESSetShift",pipefgmres->shift,&shift,&flg);CHKERRQ(ierr); if (flg) { ierr = KSPPIPEFGMRESSetShift(ksp,shift);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }