Subversion Repositories slepc-dev

Rev

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

Rev 2139 Rev 2161
Line 96... Line 96...
  char           filename[PETSC_MAX_PATH_LEN];
  char           filename[PETSC_MAX_PATH_LEN];
  EPSSortForSTData data;
  EPSSortForSTData data;
  Mat            A,B;
  Mat            A,B;
  KSP            ksp;
  KSP            ksp;
  Vec            w,x;
  Vec            w,x;
 
#define NUMEXTSOLV 5
 
  const EPSType solvers[NUMEXTSOLV] = { EPSARPACK, EPSBLZPACK, EPSTRLAN, EPSBLOPEX, EPSPRIMME };
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
  PetscValidHeaderSpecific(eps,EPS_COOKIE,1);
  PetscValidHeaderSpecific(eps,EPS_COOKIE,1);
 
 
  flg = PETSC_FALSE;
  flg = PETSC_FALSE;
Line 120... Line 122...
  eps->evecsavailable = PETSC_FALSE;
  eps->evecsavailable = PETSC_FALSE;
  eps->nconv = 0;
  eps->nconv = 0;
  eps->its = 0;
  eps->its = 0;
  for (i=0;i<eps->ncv;i++) eps->eigr[i]=eps->eigi[i]=eps->errest[i]=0.0;
  for (i=0;i<eps->ncv;i++) eps->eigr[i]=eps->eigi[i]=eps->errest[i]=0.0;
  EPSMonitor(eps,eps->its,eps->nconv,eps->eigr,eps->eigi,eps->errest,eps->ncv);
  EPSMonitor(eps,eps->its,eps->nconv,eps->eigr,eps->eigi,eps->errest,eps->ncv);
 
 
 
  flg = PETSC_FALSE;
 
  for (i=0;i<NUMEXTSOLV && !flg;i++) {
 
    ierr = PetscTypeCompare((PetscObject)eps,solvers[i],&flg);CHKERRQ(ierr);
 
  }
 
 
  ierr = PetscLogEventBegin(EPS_Solve,eps,eps->V[0],eps->V[0],0);CHKERRQ(ierr);
  ierr = PetscLogEventBegin(EPS_Solve,eps,eps->V[0],eps->V[0],0);CHKERRQ(ierr);
 
 
  /* temporarily change which */
  if (!flg) {
  data.old_which = eps->which;
    /* temporarily change which */
  data.old_which_func = eps->which_func;
    data.old_which = eps->which;
  data.old_which_ctx = eps->which_ctx;
    data.old_which_func = eps->which_func;
  eps->which = EPS_WHICH_USER;
    data.old_which_ctx = eps->which_ctx;
  eps->which_func = EPSSortForSTFunc;
    eps->which = EPS_WHICH_USER;
  eps->which_ctx = &data;
    eps->which_func = EPSSortForSTFunc;
 
    eps->which_ctx = &data;
 
  }
 
 
  /* call solver */
  /* call solver */
  ierr = (*eps->ops->solve)(eps);CHKERRQ(ierr);
  ierr = (*eps->ops->solve)(eps);CHKERRQ(ierr);
 
 
  /* restore which */
  if (!flg) {
  eps->which = data.old_which;
    /* restore which */
  eps->which_func = data.old_which_func;
    eps->which = data.old_which;
  eps->which_ctx = data.old_which_ctx;
    eps->which_func = data.old_which_func;
 
    eps->which_ctx = data.old_which_ctx;
 
  }
 
 
  ierr = STGetMatMode(eps->OP,&matmode);CHKERRQ(ierr);
  ierr = STGetMatMode(eps->OP,&matmode);CHKERRQ(ierr);
  if (matmode == ST_MATMODE_INPLACE && eps->ispositive) {
  if (matmode == ST_MATMODE_INPLACE && eps->ispositive) {
    /* Purify eigenvectors before reverting operator */
    /* Purify eigenvectors before reverting operator */
    ierr = (*eps->ops->computevectors)(eps);CHKERRQ(ierr);    
    ierr = (*eps->ops->computevectors)(eps);CHKERRQ(ierr);