| Line 37... |
Line 37... |
PetscInt opi,opi0;
|
PetscInt opi,opi0;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
ierr = PetscOptionsBegin(((PetscObject)eps)->comm,((PetscObject)eps)->prefix,"GD Options","EPS");CHKERRQ(ierr);
|
ierr = PetscOptionsBegin(((PetscObject)eps)->comm,((PetscObject)eps)->prefix,"GD Options","EPS");CHKERRQ(ierr);
|
|
|
ierr = EPSGDGetKrylovStart(eps, &op); CHKERRQ(ierr);
|
ierr = EPSGDGetKrylovStart(eps, &op);CHKERRQ(ierr);
|
ierr = PetscOptionsBool("-eps_gd_krylov_start","Start the searching subspace with a krylov basis","EPSGDSetKrylovStart",op,&op,&flg); CHKERRQ(ierr);
|
ierr = PetscOptionsBool("-eps_gd_krylov_start","Start the searching subspace with a krylov basis","EPSGDSetKrylovStart",op,&op,&flg);CHKERRQ(ierr);
|
if(flg) { ierr = EPSGDSetKrylovStart(eps, op); CHKERRQ(ierr); }
|
if(flg) { ierr = EPSGDSetKrylovStart(eps, op);CHKERRQ(ierr); }
|
|
|
ierr = EPSGDGetBlockSize(eps, &opi); CHKERRQ(ierr);
|
ierr = EPSGDGetBlockSize(eps, &opi);CHKERRQ(ierr);
|
ierr = PetscOptionsInt("-eps_gd_blocksize","Number vectors add to the searching subspace","EPSGDSetBlockSize",opi,&opi,&flg); CHKERRQ(ierr);
|
ierr = PetscOptionsInt("-eps_gd_blocksize","Number vectors add to the searching subspace","EPSGDSetBlockSize",opi,&opi,&flg);CHKERRQ(ierr);
|
if(flg) { ierr = EPSGDSetBlockSize(eps, opi); CHKERRQ(ierr); }
|
if(flg) { ierr = EPSGDSetBlockSize(eps, opi);CHKERRQ(ierr); }
|
|
|
ierr = EPSGDGetRestart(eps, &opi, &opi0); CHKERRQ(ierr);
|
ierr = EPSGDGetRestart(eps, &opi, &opi0);CHKERRQ(ierr);
|
ierr = PetscOptionsInt("-eps_gd_minv","Set the size of the searching subspace after restarting","EPSGDSetRestart",opi,&opi,&flg); CHKERRQ(ierr);
|
ierr = PetscOptionsInt("-eps_gd_minv","Set the size of the searching subspace after restarting","EPSGDSetRestart",opi,&opi,&flg);CHKERRQ(ierr);
|
if(flg) { ierr = EPSGDSetRestart(eps, opi, opi0); CHKERRQ(ierr); }
|
if(flg) { ierr = EPSGDSetRestart(eps, opi, opi0);CHKERRQ(ierr); }
|
|
|
ierr = PetscOptionsInt("-eps_gd_plusk","Set the number of saved eigenvectors from the previous iteration when restarting","EPSGDSetRestart",opi0,&opi0,&flg); CHKERRQ(ierr);
|
ierr = PetscOptionsInt("-eps_gd_plusk","Set the number of saved eigenvectors from the previous iteration when restarting","EPSGDSetRestart",opi0,&opi0,&flg);CHKERRQ(ierr);
|
if(flg) { ierr = EPSGDSetRestart(eps, opi, opi0); CHKERRQ(ierr); }
|
if(flg) { ierr = EPSGDSetRestart(eps, opi, opi0);CHKERRQ(ierr); }
|
|
|
ierr = EPSGDGetInitialSize(eps, &opi); CHKERRQ(ierr);
|
ierr = EPSGDGetInitialSize(eps, &opi);CHKERRQ(ierr);
|
ierr = PetscOptionsInt("-eps_gd_initial_size","Set the initial size of the searching subspace","EPSGDSetInitialSize",opi,&opi,&flg); CHKERRQ(ierr);
|
ierr = PetscOptionsInt("-eps_gd_initial_size","Set the initial size of the searching subspace","EPSGDSetInitialSize",opi,&opi,&flg);CHKERRQ(ierr);
|
if(flg) { ierr = EPSGDSetInitialSize(eps, opi); CHKERRQ(ierr); }
|
if(flg) { ierr = EPSGDSetInitialSize(eps, opi);CHKERRQ(ierr); }
|
|
|
ierr = PetscOptionsEnd();CHKERRQ(ierr);
|
ierr = PetscOptionsEnd();CHKERRQ(ierr);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
EXTERN_C_END
|
EXTERN_C_END
|
| Line 71... |
Line 71... |
PetscBool t;
|
PetscBool t;
|
KSP ksp;
|
KSP ksp;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
/* Setup common for all davidson solvers */
|
/* Setup common for all davidson solvers */
|
ierr = EPSSetUp_Davidson(eps); CHKERRQ(ierr);
|
ierr = EPSSetUp_Davidson(eps);CHKERRQ(ierr);
|
|
|
/* Check some constraints */
|
/* Check some constraints */
|
ierr = STSetUp(eps->OP); CHKERRQ(ierr);
|
ierr = STSetUp(eps->OP);CHKERRQ(ierr);
|
ierr = STGetKSP(eps->OP, &ksp); CHKERRQ(ierr);
|
ierr = STGetKSP(eps->OP, &ksp);CHKERRQ(ierr);
|
ierr = PetscTypeCompare((PetscObject)ksp, KSPPREONLY, &t); CHKERRQ(ierr);
|
ierr = PetscTypeCompare((PetscObject)ksp, KSPPREONLY, &t);CHKERRQ(ierr);
|
if (!t) SETERRQ(((PetscObject)eps)->comm,PETSC_ERR_SUP, "EPSGD only works with KSPPREONLY");
|
if (!t) SETERRQ(((PetscObject)eps)->comm,PETSC_ERR_SUP, "EPSGD only works with KSPPREONLY");
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
|
|
| Line 91... |
Line 91... |
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
/* Load the Davidson solver */
|
/* Load the Davidson solver */
|
ierr = EPSCreate_Davidson(eps); CHKERRQ(ierr);
|
ierr = EPSCreate_Davidson(eps);CHKERRQ(ierr);
|
|
|
/* Overload the GD properties */
|
/* Overload the GD properties */
|
eps->ops->setfromoptions = EPSSetFromOptions_GD;
|
eps->ops->setfromoptions = EPSSetFromOptions_GD;
|
eps->ops->setup = EPSSetUp_GD;
|
eps->ops->setup = EPSSetUp_GD;
|
eps->ops->destroy = EPSDestroy_GD;
|
eps->ops->destroy = EPSDestroy_GD;
|