Subversion Repositories slepc-dev

Rev

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

Rev 2614 Rev 2624
Line 162... Line 162...
  if (b->state >= DVD_STATE_CONF) {
  if (b->state >= DVD_STATE_CONF) {
    ierr = PetscMalloc(sizeof(dvdImprovex_jd), &data); CHKERRQ(ierr);
    ierr = PetscMalloc(sizeof(dvdImprovex_jd), &data); CHKERRQ(ierr);
    data->dynamic = dynamic;
    data->dynamic = dynamic;
    data->size_real_KZ = size_P;
    data->size_real_KZ = size_P;
    data->real_KZ = b->free_vecs; b->free_vecs+= data->size_real_KZ;
    data->real_KZ = b->free_vecs; b->free_vecs+= data->size_real_KZ;
    d->max_size_cX_in_impr = cX_impr;
    d->max_cX_in_impr = cX_impr;
    data->XKZ = b->free_scalars; b->free_scalars+= size_P*size_P;
    data->XKZ = b->free_scalars; b->free_scalars+= size_P*size_P;
    data->ldXKZ = size_P;
    data->ldXKZ = size_P;
    data->size_X = b->max_size_X;
    data->size_X = b->max_size_X;
    data->old_improveX_data = d->improveX_data;
    data->old_improveX_data = d->improveX_data;
    d->improveX_data = data;
    d->improveX_data = data;
Line 570... Line 570...
  kr <- K^{-1}*(A-eig*B)*X, being X <- V*pX[i_s..i_e-1], Y <- W*pY[i_s..i_e-1]
  kr <- K^{-1}*(A-eig*B)*X, being X <- V*pX[i_s..i_e-1], Y <- W*pY[i_s..i_e-1]
  where
  where
  auxV, 4*(i_e-i_s) auxiliar global vectors
  auxV, 4*(i_e-i_s) auxiliar global vectors
  pX,pY, the right and left eigenvectors of the projected system
  pX,pY, the right and left eigenvectors of the projected system
  ld, the leading dimension of pX and pY
  ld, the leading dimension of pX and pY
  auxS: max(8*bs*max_size_cX_in_proj,size_V*size_V)
  auxS: max(8*bs*max_cX_in_proj,size_V*size_V)
*/
*/
PetscErrorCode dvd_improvex_jd_proj_cuv(dvdDashboard *d, PetscInt i_s,
PetscErrorCode dvd_improvex_jd_proj_cuv(dvdDashboard *d, PetscInt i_s,
  PetscInt i_e, Vec **u, Vec **v, Vec *kr, Vec **auxV, PetscScalar **auxS,
  PetscInt i_e, Vec **u, Vec **v, Vec *kr, Vec **auxV, PetscScalar **auxS,
  PetscScalar *theta, PetscScalar *thetai, PetscScalar *pX, PetscScalar *pY,
  PetscScalar *theta, PetscScalar *thetai, PetscScalar *pX, PetscScalar *pY,
  PetscInt ld)
  PetscInt ld)
Line 590... Line 590...
  /* Check consistency */
  /* Check consistency */
  V_new = d->size_cX - data->size_cX;
  V_new = d->size_cX - data->size_cX;
  if (V_new > data->old_size_X) { SETERRQ(PETSC_COMM_SELF,1, "Consistency broken!"); }
  if (V_new > data->old_size_X) { SETERRQ(PETSC_COMM_SELF,1, "Consistency broken!"); }
  data->old_size_X = n;
  data->old_size_X = n;
 
 
  /* KZ <- KZ(rm:) */
  /* KZ <- KZ(rm:rm+max_cX-1) */
  rm = PetscMax(V_new+data->size_KZ-d->max_size_cX_in_impr, 0);
  rm = PetscMax(V_new+data->size_KZ-d->max_cX_in_impr, 0);
  if (rm > 0) for (i=rm; i<data->size_KZ+V_new; i++) {
  for (i=0; i<d->max_cX_in_impr; i++) {
    ierr = VecCopy(data->KZ[i], data->KZ[i-rm]);CHKERRQ(ierr);
    ierr = VecCopy(data->KZ[i+rm], data->KZ[i]);CHKERRQ(ierr);
  }
  }
  data->size_KZ+= V_new-rm;
 
  data->size_cX = d->size_cX;
  data->size_cX = d->size_cX;
 
 
  /* XKZ <- XKZ(rm:,rm:) */
  /* XKZ <- XKZ(rm:rm+max_cX-1,rm:rm+max_cX-1) */
  if (rm > 0) for (i=rm; i<data->size_KZ+V_new; i++) {
  for (i=0; i<d->max_cX_in_impr; i++) {
    ierr = SlepcDenseCopy(&data->XKZ[i*data->ldXKZ+i], data->ldXKZ, &data->XKZ[(i-rm)*data->ldXKZ+i-rm], data->ldXKZ, data->size_KZ, 1);CHKERRQ(ierr);
    ierr = SlepcDenseCopy(&data->XKZ[i*data->ldXKZ+i], data->ldXKZ, &data->XKZ[(i+rm)*data->ldXKZ+i+rm], data->ldXKZ, data->size_KZ, 1);CHKERRQ(ierr);
  }
  }
 
  data->size_KZ = PetscMin(d->max_cX_in_impr, data->size_KZ+V_new);
 
 
  /* Compute X, KZ and KR */
  /* Compute X, KZ and KR */
  *u = *auxV; *auxV+= n;
  *u = *auxV; *auxV+= n;
  *v = &data->KZ[data->size_KZ];
  *v = &data->KZ[data->size_KZ];
  ierr = d->improvex_jd_proj_uv(d, i_s, i_e, *u, *v, kr, *auxV, theta, thetai,
  ierr = d->improvex_jd_proj_uv(d, i_s, i_e, *u, *v, kr, *auxV, theta, thetai,