| Line 76... |
Line 76... |
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
ierr = SVDMatMult(svd,PETSC_FALSE,V[k],u);CHKERRQ(ierr);
|
ierr = SVDMatMult(svd,PETSC_FALSE,V[k],u);CHKERRQ(ierr);
|
for (i=k+1;i<n;i++) {
|
for (i=k+1;i<n;i++) {
|
ierr = SVDMatMult(svd,PETSC_TRUE,u,V[i]);CHKERRQ(ierr);
|
ierr = SVDMatMult(svd,PETSC_TRUE,u,V[i]);CHKERRQ(ierr);
|
svd->dots += i;
|
ierr = IPNormBegin(svd->ip,u,&a);CHKERRQ(ierr);
|
ierr = VecNormBegin(u,NORM_2,&a);CHKERRQ(ierr);
|
ierr = IPMInnerProductBegin(svd->ip,i,V[i],V,work);CHKERRQ(ierr);
|
ierr = VecMDotBegin(V[i],i,V,work);CHKERRQ(ierr);
|
ierr = IPNormEnd(svd->ip,u,&a);CHKERRQ(ierr);
|
ierr = VecNormEnd(u,NORM_2,&a);CHKERRQ(ierr);
|
ierr = IPMInnerProductEnd(svd->ip,i,V[i],V,work);CHKERRQ(ierr);
|
ierr = VecMDotEnd(V[i],i,V,work);CHKERRQ(ierr);
|
|
|
|
ierr = VecScale(u,1.0/a);CHKERRQ(ierr);
|
ierr = VecScale(u,1.0/a);CHKERRQ(ierr);
|
ierr = VecScale(V[i],1.0/a);CHKERRQ(ierr);
|
ierr = VecScale(V[i],1.0/a);CHKERRQ(ierr);
|
for (j=0;j<i;j++) work[j] = - work[j] / a;
|
for (j=0;j<i;j++) work[j] = - work[j] / a;
|
ierr = VecMAXPY(V[i],i,work,V);CHKERRQ(ierr);
|
ierr = VecMAXPY(V[i],i,work,V);CHKERRQ(ierr);
|
| Line 100... |
Line 99... |
temp = u;
|
temp = u;
|
u = u_1;
|
u = u_1;
|
u_1 = temp;
|
u_1 = temp;
|
}
|
}
|
ierr = SVDMatMult(svd,PETSC_TRUE,u,v);CHKERRQ(ierr);
|
ierr = SVDMatMult(svd,PETSC_TRUE,u,v);CHKERRQ(ierr);
|
svd->dots += i;
|
ierr = IPNormBegin(svd->ip,u,&a);CHKERRQ(ierr);
|
ierr = VecNormBegin(u,NORM_2,&a);CHKERRQ(ierr);
|
ierr = IPMInnerProductBegin(svd->ip,n,v,V,work);CHKERRQ(ierr);
|
ierr = VecMDotBegin(v,n,V,work);CHKERRQ(ierr);
|
ierr = IPNormEnd(svd->ip,u,&a);CHKERRQ(ierr);
|
ierr = VecNormEnd(u,NORM_2,&a);CHKERRQ(ierr);
|
ierr = IPMInnerProductEnd(svd->ip,n,v,V,work);CHKERRQ(ierr);
|
ierr = VecMDotEnd(v,n,V,work);CHKERRQ(ierr);
|
|
|
|
ierr = VecScale(u,1.0/a);CHKERRQ(ierr);
|
ierr = VecScale(u,1.0/a);CHKERRQ(ierr);
|
ierr = VecScale(v,1.0/a);CHKERRQ(ierr);
|
ierr = VecScale(v,1.0/a);CHKERRQ(ierr);
|
for (j=0;j<n;j++) work[j] = - work[j] / a;
|
for (j=0;j<n;j++) work[j] = - work[j] / a;
|
ierr = VecMAXPY(v,n,work,V);CHKERRQ(ierr);
|
ierr = VecMAXPY(v,n,work,V);CHKERRQ(ierr);
|