Subversion Repositories slepc-dev

Compare Revisions

Ignore whitespace Rev 2600 → Rev 2601

/branches/slepc-3_2-proj/src/eps/impls/davidson/common/dvd_calcpairs.c
330,10 → 330,10
}
 
/* Check consistency */
if (d->size_V != d->V_new_e || d->size_V != d->size_H ||
if (d->size_V != d->V_new_e || d->size_V+d->cX_in_H != d->size_H ||
d->size_V != d->size_AV || d->cX_in_H != d->cX_in_AV ||
(DVD_ISNOT(d->sEP, DVD_EP_STD) && (
d->size_V != d->size_G || d->cX_in_H != d->cX_in_G ||
d->size_V+d->cX_in_G != d->size_G || d->cX_in_H != d->cX_in_G ||
d->size_H != d->size_G || (d->BV && (
d->size_V != d->size_BV || d->cX_in_H != d->cX_in_BV)))) ||
(d->W && d->size_W != d->size_V)) {
903,6 → 903,7
*max_size_BV-= d->V_tra_s;
*size_BV = d->V_tra_e - d->V_tra_s;
if (size_cBV) *size_cBV = *BV - real_BV;
if (cX_in_proj) *cX_in_proj = *BV - real_BV;
} else { /* !BV_shift */
/* BV <- BV*MTX(V_tra_s:) */
ierr = SlepcUpdateVectorsZ(*BV, 0.0, 1.0, *BV, *size_BV,
/branches/slepc-3_2-proj/src/eps/impls/davidson/common/dvd_updatev.c
277,17 → 277,17
npreconv = PetscMax(PetscMin(d->nev - d->nconv, npreconv), 0);
#endif
 
if (d->npreconv == 0) { PetscFunctionReturn(0); }
if (npreconv <= d->cX_in_H) { PetscFunctionReturn(0); }
 
#if !defined(PETSC_USE_COMPLEX)
/* Correct the order of the conjugate eigenpairs */
if (d->T) for (i=0; i<npreconv; i++) if (d->eigi[i] != 0.0) {
if (d->T) for (i=0; i<npreconv-d->cX_in_H; i++) if (d->eigi[i] != 0.0) {
if (d->eigi[i] < 0.0) {
d->eigi[i]*= -1.0;
d->eigi[i+1]*= -1.0;
for (j=0; j<d->size_H; j++) d->pX[j+(i+1)*d->ldpX]*= -1.0;
for (j=0; j<d->size_H; j++) d->S[j+(i+1)*d->ldS]*= -1.0;
for (j=0; j<d->size_H; j++) d->T[j+(i+1)*d->ldT]*= -1.0;
for (j=0; j<d->size_H; j++) d->pX[j+(d->cX_in_H+i+1)*d->ldpX]*= -1.0;
for (j=0; j<d->size_H; j++) d->S[j+(d->cX_in_H+i+1)*d->ldS]*= -1.0;
for (j=0; j<d->size_H; j++) d->T[j+(d->cX_in_H+i+1)*d->ldT]*= -1.0;
}
i++;
}
314,12 → 314,12
d->MTY = PETSC_NULL;
 
/* Lock the converged pairs */
d->eigr+= npreconv;
d->eigr+= npreconv-d->cX_in_H;
#if !defined(PETSC_USE_COMPLEX)
if (d->eigi) d->eigi+= npreconv;
if (d->eigi) d->eigi+= npreconv-d->cX_in_H;
#endif
d->nconv+= npreconv;
d->errest+= npreconv;
d->nconv+= npreconv-d->cX_in_H;
d->errest+= npreconv-d->cX_in_H;
 
/* Notify the changes in V and update the other subspaces */
d->V_tra_s = npreconv; d->V_tra_e = d->size_H;
453,16 → 453,15
}
 
/* Fill V with D */
ierr = d->improveX(d, d->V+d->size_V, d->max_size_V-d->size_V, 0, size_D,
&size_D); CHKERRQ(ierr);
ierr = d->improveX(d, d->V+d->size_V, d->max_size_V-d->size_V, d->cX_in_H, size_D+d->cX_in_H, &size_D); CHKERRQ(ierr);
 
/* If D is empty, exit */
d->size_D = size_D;
if (size_D == 0) { PetscFunctionReturn(0); }
 
/* Get the converged pairs */
ierr = dvd_updateV_testConv(d, 0, size_D,
data->allResiduals?d->size_V:size_D, d->auxV, d->auxS,
ierr = dvd_updateV_testConv(d, d->cX_in_H, size_D+d->cX_in_H,
data->allResiduals?d->size_V:size_D+d->cX_in_H, d->auxV, d->auxS,
&d->npreconv); CHKERRQ(ierr);
 
/* Notify the changes in V */
/branches/slepc-3_2-proj/src/eps/impls/davidson/common/dvd_improvex.c
721,8 → 721,7
PetscFunctionBegin;
 
/* u <- X(i) */
ierr = SlepcUpdateVectorsZ(u, 0.0, 1.0, d->V, d->size_V, pX, ld,
d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(u, 0.0, 1.0, d->V-d->cX_in_H, d->size_V+d->cX_in_H, pX, ld, d->size_H, n); CHKERRQ(ierr);
/* nX(i) <- ||X(i)|| */
if (d->correctXnorm) {
for (i=0; i<n; i++) {
741,8 → 740,7
Bx = kr;
for(i=i_s; i<i_e; i++) d->nX[i] = 1.0;
if (d->BV) {
ierr = SlepcUpdateVectorsZ(Bx, 0.0, 1.0, d->BV, d->size_BV, pX, ld,
d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(Bx, 0.0, 1.0, d->BV-d->cX_in_H, d->size_BV+d->cX_in_H, pX, ld, d->size_H, n); CHKERRQ(ierr);
} else {
for(i=0; i<n; i++) {
if (d->B) {
755,12 → 753,10
 
/* Ax <- A*X(i) */
Ax = r;
ierr = SlepcUpdateVectorsZ(Ax, 0.0, 1.0, d->AV, d->size_AV, pX, ld,
d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(Ax, 0.0, 1.0, d->AV-d->cX_in_H, d->size_AV+d->cX_in_H, pX, ld, d->size_H, n); CHKERRQ(ierr);
 
/* v <- Y(i) */
ierr = SlepcUpdateVectorsZ(v, 0.0, 1.0, d->W?d->W:d->V, d->size_V, pY, ld,
d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(v, 0.0, 1.0, (d->W?d->W:d->V)-d->cX_in_H, d->size_V+d->cX_in_H, pY, ld, d->size_H, n); CHKERRQ(ierr);
 
/* Recompute the eigenvalue */
DVD_COMPUTE_N_RR(d->eps, i, i_s, n, d->eigr, d->eigi, v, Ax, Bx, b, ierr);
838,17 → 834,14
PetscFunctionBegin;
 
/* [v u] <- X(i) Y(i) */
ierr = SlepcUpdateVectorsZ(v, 0.0, 1.0, d->V, d->size_V, pX, ld,
d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(u, 0.0, 1.0, d->W?d->W:d->V, d->size_V, pY, ld,
d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(v, 0.0, 1.0, d->V-d->cX_in_H, d->size_V+d->cX_in_H, pX, ld, d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(u, 0.0, 1.0, (d->W?d->W:d->V)-d->cX_in_H, d->size_V+d->cX_in_H, pY, ld, d->size_H, n); CHKERRQ(ierr);
 
/* Bx <- B*X(i) */
Bx = kr;
for(i=i_s; i<i_e; i++) d->nX[i] = 1.0;
if (d->BV) {
ierr = SlepcUpdateVectorsZ(Bx, 0.0, 1.0, d->BV, d->size_BV, pX, ld,
d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(Bx, 0.0, 1.0, d->BV-d->cX_in_H, d->size_BV+d->cX_in_H, pX, ld, d->size_H, n); CHKERRQ(ierr);
} else {
if (d->B) {
for(i=0; i<n; i++) {
860,8 → 853,7
 
/* Ax <- A*X(i) */
Ax = r;
ierr = SlepcUpdateVectorsZ(Ax, 0.0, 1.0, d->AV, d->size_AV, pX, ld,
d->size_H, n); CHKERRQ(ierr);
ierr = SlepcUpdateVectorsZ(Ax, 0.0, 1.0, d->AV-d->cX_in_H, d->size_AV+d->cX_in_H, pX, ld, d->size_H, n); CHKERRQ(ierr);
 
/* Recompute the eigenvalue */
DVD_COMPUTE_N_RR(d->eps, i, i_s, n, d->eigr, d->eigi, u, Ax, Bx, b, ierr);
/branches/slepc-3_2-proj/src/eps/impls/davidson/common/davidson.c
252,7 → 252,7
PetscAbs(eps->nini),
plusk,harm,
ksp,init,eps->trackall,
ipB?DVD_ORTHOV_BOneMV:DVD_ORTHOV_I,0,0);
ipB?DVD_ORTHOV_BOneMV:DVD_ORTHOV_I,1,0);
CHKERRQ(ierr);
 
/* Allocate memory */
279,7 → 279,7
eps->ip,harm,dvd->withTarget,
target,ksp,
fix,init,eps->trackall,
ipB?DVD_ORTHOV_BOneMV:DVD_ORTHOV_I,0,0);
ipB?DVD_ORTHOV_BOneMV:DVD_ORTHOV_I,1,0);
CHKERRQ(ierr);
 
/* Associate the eigenvalues to the EPS */