Subversion Repositories slepc-dev

Rev

Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2825 Rev 2832
Line 352... Line 352...
  PetscValidHeaderSpecific(ps,PS_CLASSID,1);
  PetscValidHeaderSpecific(ps,PS_CLASSID,1);
  PetscValidPointer(eigr,2);
  PetscValidPointer(eigr,2);
  if (!ps->ld) SETERRQ(((PetscObject)ps)->comm,PETSC_ERR_ORDER,"Must call PSAllocate() first");
  if (!ps->ld) SETERRQ(((PetscObject)ps)->comm,PETSC_ERR_ORDER,"Must call PSAllocate() first");
  if (!ps->ops->solve) SETERRQ1(((PetscObject)ps)->comm,PETSC_ERR_SUP,"PS type %s",((PetscObject)ps)->type_name);
  if (!ps->ops->solve) SETERRQ1(((PetscObject)ps)->comm,PETSC_ERR_SUP,"PS type %s",((PetscObject)ps)->type_name);
  if (ps->state>=PS_STATE_CONDENSED) PetscFunctionReturn(0);
  if (ps->state>=PS_STATE_CONDENSED) PetscFunctionReturn(0);
  if (ps->method>=ps->nmeth) SETERRQ1(((PetscObject)ps)->comm,PETSC_ERR_ARG_OUTOFRANGE,"The maximum method index for this PS is %d",ps->nmeth-1);
 
  ierr = PetscLogEventBegin(PS_Solve,ps,0,0,0);CHKERRQ(ierr);
  ierr = PetscLogEventBegin(PS_Solve,ps,0,0,0);CHKERRQ(ierr);
  ierr = PetscFPTrapPush(PETSC_FP_TRAP_OFF);CHKERRQ(ierr);
  ierr = PetscFPTrapPush(PETSC_FP_TRAP_OFF);CHKERRQ(ierr);
  ierr = (*ps->ops->solve)(ps,eigr,eigi);CHKERRQ(ierr);
  if (!ps->ops->solve[ps->method]) SETERRQ(((PetscObject)ps)->comm,PETSC_ERR_ARG_OUTOFRANGE,"The specified method number does not exist for this PS");
 
  ierr = (*ps->ops->solve[ps->method])(ps,eigr,eigi);CHKERRQ(ierr);
  ierr = PetscFPTrapPop();CHKERRQ(ierr);
  ierr = PetscFPTrapPop();CHKERRQ(ierr);
  ierr = PetscLogEventEnd(PS_Solve,ps,0,0,0);CHKERRQ(ierr);
  ierr = PetscLogEventEnd(PS_Solve,ps,0,0,0);CHKERRQ(ierr);
  ps->state = PS_STATE_CONDENSED;
  ps->state = PS_STATE_CONDENSED;
  ierr = PetscObjectStateIncrease((PetscObject)ps);CHKERRQ(ierr);
  ierr = PetscObjectStateIncrease((PetscObject)ps);CHKERRQ(ierr);
  PetscFunctionReturn(0);
  PetscFunctionReturn(0);