| Line 181... |
Line 181... |
{
|
{
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
|
PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
|
PetscValidIntPointer(nconv,2);
|
PetscValidIntPointer(nconv,2);
|
if (svd->reason == SVD_CONVERGED_ITERATING) {
|
if (svd->reason == SVD_CONVERGED_ITERATING) {
|
SETERRQ(PETSC_ERR_ARG_WRONGSTATE, "SVDSolve must be called first");
|
SETERRQ(((PetscObject)svd)->comm,PETSC_ERR_ARG_WRONGSTATE, "SVDSolve must be called first");
|
}
|
}
|
*nconv = svd->nconv;
|
*nconv = svd->nconv;
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
| Line 225... |
Line 225... |
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
|
PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
|
PetscValidPointer(sigma,3);
|
PetscValidPointer(sigma,3);
|
if (svd->reason == SVD_CONVERGED_ITERATING) {
|
if (svd->reason == SVD_CONVERGED_ITERATING) {
|
SETERRQ(PETSC_ERR_ARG_WRONGSTATE, "SVDSolve must be called first");
|
SETERRQ(((PetscObject)svd)->comm,PETSC_ERR_ARG_WRONGSTATE, "SVDSolve must be called first");
|
}
|
}
|
if (i<0 || i>=svd->nconv) {
|
if (i<0 || i>=svd->nconv) {
|
SETERRQ(PETSC_ERR_ARG_OUTOFRANGE, "Argument 2 out of range");
|
SETERRQ(((PetscObject)svd)->comm,PETSC_ERR_ARG_OUTOFRANGE, "Argument 2 out of range");
|
}
|
}
|
*sigma = svd->sigma[svd->perm[i]];
|
*sigma = svd->sigma[svd->perm[i]];
|
ierr = MatGetSize(svd->OP,&M,&N);CHKERRQ(ierr);
|
ierr = MatGetSize(svd->OP,&M,&N);CHKERRQ(ierr);
|
if (M<N) { w = u; u = v; v = w; }
|
if (M<N) { w = u; u = v; v = w; }
|
if (u) {
|
if (u) {
|
| Line 292... |
Line 292... |
PetscInt M,N;
|
PetscInt M,N;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
|
PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
|
if (svd->reason == SVD_CONVERGED_ITERATING) {
|
if (svd->reason == SVD_CONVERGED_ITERATING) {
|
SETERRQ(PETSC_ERR_ARG_WRONGSTATE, "SVDSolve must be called first");
|
SETERRQ(((PetscObject)svd)->comm,PETSC_ERR_ARG_WRONGSTATE, "SVDSolve must be called first");
|
}
|
}
|
if (i<0 || i>=svd->nconv) {
|
if (i<0 || i>=svd->nconv) {
|
SETERRQ(PETSC_ERR_ARG_OUTOFRANGE, "Argument 2 out of range");
|
SETERRQ(((PetscObject)svd)->comm,PETSC_ERR_ARG_OUTOFRANGE, "Argument 2 out of range");
|
}
|
}
|
|
|
ierr = MatGetVecs(svd->OP,&v,&u);CHKERRQ(ierr);
|
ierr = MatGetVecs(svd->OP,&v,&u);CHKERRQ(ierr);
|
ierr = SVDGetSingularTriplet(svd,i,&sigma,u,v);CHKERRQ(ierr);
|
ierr = SVDGetSingularTriplet(svd,i,&sigma,u,v);CHKERRQ(ierr);
|
if (norm1) {
|
if (norm1) {
|