Subversion Repositories slepc-dev

Rev

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

Rev 2632 Rev 2654
Line 136... Line 136...
    ierr = KSPSetOperators(st->ksp,st->mat,st->mat,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
    ierr = KSPSetOperators(st->ksp,st->mat,st->mat,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
    break;
    break;
  default:
  default:
    if (st->sigma != 0.0) {
    if (st->sigma != 0.0) {
      ierr = MatDuplicate(st->A,MAT_COPY_VALUES,&st->mat);CHKERRQ(ierr);
      ierr = MatDuplicate(st->A,MAT_COPY_VALUES,&st->mat);CHKERRQ(ierr);
      if (st->B) {
      if (st->B) { ierr = MatAXPY(st->mat,-st->sigma,st->B,st->str);CHKERRQ(ierr); }
        ierr = MatAXPY(st->mat,-st->sigma,st->B,st->str);CHKERRQ(ierr);
      else { ierr = MatShift(st->mat,-st->sigma);CHKERRQ(ierr); }
      } else {
 
        ierr = MatShift(st->mat,-st->sigma);CHKERRQ(ierr);
 
      }
 
      ierr = KSPSetOperators(st->ksp,st->mat,st->mat,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
      ierr = KSPSetOperators(st->ksp,st->mat,st->mat,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
    } else {
    } else {
      st->mat = PETSC_NULL;
      st->mat = PETSC_NULL;
      ierr = KSPSetOperators(st->ksp,st->A,st->A,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
      ierr = KSPSetOperators(st->ksp,st->A,st->A,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
    }
    }
  }
  }
 
 
  ierr = KSPSetUp(st->ksp);CHKERRQ(ierr);
  ierr = KSPSetUp(st->ksp);CHKERRQ(ierr);
  PetscFunctionReturn(0);
  PetscFunctionReturn(0);
}
}
 
 
#undef __FUNCT__  
#undef __FUNCT__  
Line 162... Line 158...
  MatStructure   flg;
  MatStructure   flg;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
  /* Nothing to be done if STSetUp has not been called yet */
  /* Nothing to be done if STSetUp has not been called yet */
  if (!st->setupcalled) PetscFunctionReturn(0);
  if (!st->setupcalled) PetscFunctionReturn(0);
 
 
  /* Check if the new KSP matrix has the same zero structure */
  /* Check if the new KSP matrix has the same zero structure */
  if (st->B && st->str == DIFFERENT_NONZERO_PATTERN && (st->sigma == 0.0 || newshift == 0.0)) {
  if (st->B && st->str == DIFFERENT_NONZERO_PATTERN && (st->sigma == 0.0 || newshift == 0.0)) {
    flg = DIFFERENT_NONZERO_PATTERN;
    flg = DIFFERENT_NONZERO_PATTERN;
  } else {
  } else {
    flg = SAME_NONZERO_PATTERN;
    flg = SAME_NONZERO_PATTERN;
Line 191... Line 187...
      }
      }
    }
    }
    ierr = KSPSetOperators(st->ksp,st->A,st->A,flg);CHKERRQ(ierr);
    ierr = KSPSetOperators(st->ksp,st->A,st->A,flg);CHKERRQ(ierr);
    break;
    break;
  case ST_MATMODE_SHELL:
  case ST_MATMODE_SHELL:
    ierr = KSPSetOperators(st->ksp,st->mat,st->mat,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);    
    ierr = KSPSetOperators(st->ksp,st->mat,st->mat,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
    break;
    break;
  default:
  default:
    if (st->mat) {
    if (st->mat) {
      ierr = MatCopy(st->A,st->mat,SUBSET_NONZERO_PATTERN);CHKERRQ(ierr);
      ierr = MatCopy(st->A,st->mat,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
    } else {
    } else {
      ierr = MatDuplicate(st->A,MAT_COPY_VALUES,&st->mat);CHKERRQ(ierr);
      ierr = MatDuplicate(st->A,MAT_COPY_VALUES,&st->mat);CHKERRQ(ierr);
    }
    }
    if (newshift != 0.0) {  
    if (newshift != 0.0) {  
      if (st->B) {
      if (st->B) { ierr = MatAXPY(st->mat,-newshift,st->B,st->str);CHKERRQ(ierr); }
        ierr = MatAXPY(st->mat,-newshift,st->B,st->str);CHKERRQ(ierr);
      else { ierr = MatShift(st->mat,-newshift);CHKERRQ(ierr); }
      } else {
 
        ierr = MatShift(st->mat,-newshift);CHKERRQ(ierr);
 
      }
 
    }
    }
    ierr = KSPSetOperators(st->ksp,st->mat,st->mat,flg);CHKERRQ(ierr);    
    ierr = KSPSetOperators(st->ksp,st->mat,st->mat,flg);CHKERRQ(ierr);    
  }
  }
  st->sigma = newshift;
  st->sigma = newshift;
  ierr = KSPSetUp(st->ksp);CHKERRQ(ierr);
  ierr = KSPSetUp(st->ksp);CHKERRQ(ierr);