Subversion Repositories slepc-dev

Rev

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

Rev 2116 Rev 2188
Line 116... Line 116...
/*
/*
  Fill V with user vectors
  Fill V with user vectors
*/
*/
 
 
typedef struct {
typedef struct {
  Vec *userV;           /* custom initial search subspace */
 
  PetscInt size_userV,  /* size of userV */
  PetscInt size_userV,  /* size of userV */
    k;                  /* desired initial subspace size */
    k;                  /* desired initial subspace size */
  void *old_initV_data; /* old initV data */
  void *old_initV_data; /* old initV data */
} dvdInitV_User;
} dvdInitV_User;
 
 
#undef __FUNCT__  
#undef __FUNCT__  
#define __FUNCT__ "dvd_initV_user"
#define __FUNCT__ "dvd_initV_user"
PetscErrorCode dvd_initV_user(dvdDashboard *d, dvdBlackboard *b, Vec *userV,
PetscErrorCode dvd_initV_user(dvdDashboard *d, dvdBlackboard *b,
                        PetscInt size_userV, PetscInt k)
                        PetscInt size_userV, PetscInt k)
{
{
  PetscErrorCode  ierr;
  PetscErrorCode  ierr;
  dvdInitV_User   *data;
  dvdInitV_User   *data;
 
 
Line 140... Line 139...
  /* Setup the step */
  /* Setup the step */
  if (b->state >= DVD_STATE_CONF) {
  if (b->state >= DVD_STATE_CONF) {
    ierr = PetscMalloc(sizeof(dvdInitV_User), &data); CHKERRQ(ierr);
    ierr = PetscMalloc(sizeof(dvdInitV_User), &data); CHKERRQ(ierr);
    data->k = k;
    data->k = k;
    data->size_userV = size_userV;
    data->size_userV = size_userV;
    data->userV = userV;
 
    data->old_initV_data = d->initV_data;
    data->old_initV_data = d->initV_data;
    d->initV_data = data;
    d->initV_data = data;
    d->initV = dvd_initV_user_0;
    d->initV = dvd_initV_user_0;
    DVD_FL_ADD(d->destroyList, dvd_initV_user_d);
    DVD_FL_ADD(d->destroyList, dvd_initV_user_d);
  }
  }
Line 159... Line 157...
  PetscErrorCode  ierr;
  PetscErrorCode  ierr;
  dvdInitV_User   *data = (dvdInitV_User*)d->initV_data;
  dvdInitV_User   *data = (dvdInitV_User*)d->initV_data;
  PetscInt        i;
  PetscInt        i;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
 
 
 
  /* The user vectors are already in V */
 
  i = PetscMin(data->size_userV,d->max_size_V);
 
 
  /* Generate a set of random initial vectors and orthonormalize them */
  /* Generate a set of random initial vectors and orthonormalize them */
  for (i=0; i<PetscMin(data->size_userV,d->max_size_V); i++) {
 
    ierr = VecCopy(data->userV[i], d->V[i]); CHKERRQ(ierr);
 
  }
 
  for (; i<PetscMin(data->k,d->max_size_V); i++) {
  for (; i<PetscMin(data->k,d->max_size_V); i++) {
    ierr = SlepcVecSetRandom(d->V[i], d->eps->rand); CHKERRQ(ierr);
    ierr = SlepcVecSetRandom(d->V[i], d->eps->rand); CHKERRQ(ierr);
  }
  }
  d->size_V = i;
  d->size_V = i;
  d->V_imm_s = 0; d->V_imm_e = 0;
  d->V_imm_s = 0; d->V_imm_e = 0;