Subversion Repositories slepc-dev

Rev

Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2328 Rev 2330
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;