| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| 3 | SLEPc - Scalable Library for Eigenvalue Problem Computations | ||
| 4 | Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain | ||
| 5 | |||
| 6 | This file is part of SLEPc. | ||
| 7 | SLEPc is distributed under a 2-clause BSD license (see LICENSE). | ||
| 8 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| 9 | */ | ||
| 10 | /* | ||
| 11 | This file implements a wrapper to the LAPACK SVD subroutines | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <slepc/private/svdimpl.h> | ||
| 15 | #include <slepcblaslapack.h> | ||
| 16 | |||
| 17 | 237 | static PetscErrorCode SVDSetUp_LAPACK(SVD svd) | |
| 18 | { | ||
| 19 | 237 | PetscInt M,N,P=0; | |
| 20 | |||
| 21 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
237 | PetscFunctionBegin; |
| 22 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
237 | if (svd->nsv==0) svd->nsv = 1; |
| 23 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
237 | PetscCall(MatGetSize(svd->A,&M,&N)); |
| 24 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
237 | if (!svd->isgeneralized) svd->ncv = N; |
| 25 | else { | ||
| 26 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatGetSize(svd->OPb,&P,NULL)); |
| 27 | 70 | svd->ncv = PetscMin(M,PetscMin(N,P)); | |
| 28 | } | ||
| 29 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
237 | if (svd->mpd!=PETSC_DETERMINE) PetscCall(PetscInfo(svd,"Warning: parameter mpd ignored\n")); |
| 30 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
237 | SVDCheckIgnored(svd,SVD_FEATURE_STOPPING); |
| 31 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
237 | if (svd->max_it==PETSC_DETERMINE) svd->max_it = 1; |
| 32 | 237 | svd->leftbasis = PETSC_TRUE; | |
| 33 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
237 | PetscCall(SVDAllocateSolution(svd,0)); |
| 34 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
237 | PetscCall(DSAllocate(svd->ds,PetscMax(N,PetscMax(M,P)))); |
| 35 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
49 | PetscFunctionReturn(PETSC_SUCCESS); |
| 36 | } | ||
| 37 | |||
| 38 | 156 | static PetscErrorCode SVDSolve_LAPACK(SVD svd) | |
| 39 | { | ||
| 40 | 156 | PetscInt M,N,n,i,j,k,ld,lowu,lowv,highu,highv; | |
| 41 | 156 | Mat A,Ar,mat; | |
| 42 | 156 | Vec u,v; | |
| 43 | 156 | PetscScalar *pU,*pV,*pu,*pv,*w; | |
| 44 | |||
| 45 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
156 | PetscFunctionBegin; |
| 46 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSGetLeadingDimension(svd->ds,&ld)); |
| 47 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(MatCreateRedundantMatrix(svd->OP,0,PETSC_COMM_SELF,MAT_INITIAL_MATRIX,&Ar)); |
| 48 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(MatConvert(Ar,MATSEQDENSE,MAT_INITIAL_MATRIX,&mat)); |
| 49 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(MatDestroy(&Ar)); |
| 50 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(MatGetSize(mat,&M,&N)); |
| 51 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSSetDimensions(svd->ds,M,0,0)); |
| 52 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSSVDSetDimensions(svd->ds,N)); |
| 53 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSGetMat(svd->ds,DS_MAT_A,&A)); |
| 54 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(MatCopy(mat,A,SAME_NONZERO_PATTERN)); |
| 55 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSRestoreMat(svd->ds,DS_MAT_A,&A)); |
| 56 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSSetState(svd->ds,DS_STATE_RAW)); |
| 57 | |||
| 58 | 156 | n = PetscMin(M,N); | |
| 59 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(PetscMalloc1(n,&w)); |
| 60 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSSolve(svd->ds,w,NULL)); |
| 61 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSSort(svd->ds,w,NULL,NULL,NULL,NULL)); |
| 62 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSSynchronize(svd->ds,w,NULL)); |
| 63 | |||
| 64 | /* copy singular vectors */ | ||
| 65 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSGetArray(svd->ds,DS_MAT_U,&pU)); |
| 66 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSGetArray(svd->ds,DS_MAT_V,&pV)); |
| 67 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4488 | for (i=0;i<n;i++) { |
| 68 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4332 | if (svd->which == SVD_SMALLEST) k = n - i - 1; |
| 69 | else k = i; | ||
| 70 | 4332 | svd->sigma[k] = PetscRealPart(w[i]); | |
| 71 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(BVGetColumn(svd->U,k,&u)); |
| 72 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(BVGetColumn(svd->V,k,&v)); |
| 73 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(VecGetOwnershipRange(u,&lowu,&highu)); |
| 74 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(VecGetOwnershipRange(v,&lowv,&highv)); |
| 75 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(VecGetArray(u,&pu)); |
| 76 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(VecGetArray(v,&pv)); |
| 77 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4332 | if (M>=N) { |
| 78 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
124296 | for (j=lowu;j<highu;j++) pu[j-lowu] = pU[i*ld+j]; |
| 79 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
119076 | for (j=lowv;j<highv;j++) pv[j-lowv] = pV[i*ld+j]; |
| 80 | } else { | ||
| 81 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
13800 | for (j=lowu;j<highu;j++) pu[j-lowu] = pV[i*ld+j]; |
| 82 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
12600 | for (j=lowv;j<highv;j++) pv[j-lowv] = pU[i*ld+j]; |
| 83 | } | ||
| 84 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(VecRestoreArray(u,&pu)); |
| 85 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(VecRestoreArray(v,&pv)); |
| 86 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(BVRestoreColumn(svd->U,k,&u)); |
| 87 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4332 | PetscCall(BVRestoreColumn(svd->V,k,&v)); |
| 88 | } | ||
| 89 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSRestoreArray(svd->ds,DS_MAT_U,&pU)); |
| 90 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(DSRestoreArray(svd->ds,DS_MAT_V,&pV)); |
| 91 | |||
| 92 | 156 | svd->nconv = n; | |
| 93 | 156 | svd->its = 1; | |
| 94 | 156 | svd->reason = SVD_CONVERGED_TOL; | |
| 95 | |||
| 96 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(MatDestroy(&mat)); |
| 97 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
156 | PetscCall(PetscFree(w)); |
| 98 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
32 | PetscFunctionReturn(PETSC_SUCCESS); |
| 99 | } | ||
| 100 | |||
| 101 | 70 | static PetscErrorCode SVDSolve_LAPACK_GSVD(SVD svd) | |
| 102 | { | ||
| 103 | 70 | PetscInt nsv,m,n,p,i,j,mlocal,plocal,ld,lowx,lowu,lowv,highx; | |
| 104 | 70 | Mat Ar,A,Ads,Br,B,Bds; | |
| 105 | 70 | Vec uv,x; | |
| 106 | 70 | PetscScalar *U,*V,*X,*px,*puv,*w; | |
| 107 | |||
| 108 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
70 | PetscFunctionBegin; |
| 109 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSGetLeadingDimension(svd->ds,&ld)); |
| 110 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatCreateRedundantMatrix(svd->OP,0,PETSC_COMM_SELF,MAT_INITIAL_MATRIX,&Ar)); |
| 111 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatConvert(Ar,MATSEQDENSE,MAT_INITIAL_MATRIX,&A)); |
| 112 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatDestroy(&Ar)); |
| 113 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatCreateRedundantMatrix(svd->OPb,0,PETSC_COMM_SELF,MAT_INITIAL_MATRIX,&Br)); |
| 114 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatConvert(Br,MATSEQDENSE,MAT_INITIAL_MATRIX,&B)); |
| 115 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatDestroy(&Br)); |
| 116 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatGetSize(A,&m,&n)); |
| 117 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatGetLocalSize(svd->OP,&mlocal,NULL)); |
| 118 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatGetLocalSize(svd->OPb,&plocal,NULL)); |
| 119 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatGetSize(B,&p,NULL)); |
| 120 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSSetDimensions(svd->ds,m,0,0)); |
| 121 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSGSVDSetDimensions(svd->ds,n,p)); |
| 122 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSGetMat(svd->ds,DS_MAT_A,&Ads)); |
| 123 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatCopy(A,Ads,SAME_NONZERO_PATTERN)); |
| 124 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSRestoreMat(svd->ds,DS_MAT_A,&Ads)); |
| 125 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSGetMat(svd->ds,DS_MAT_B,&Bds)); |
| 126 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatCopy(B,Bds,SAME_NONZERO_PATTERN)); |
| 127 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSRestoreMat(svd->ds,DS_MAT_B,&Bds)); |
| 128 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSSetState(svd->ds,DS_STATE_RAW)); |
| 129 | |||
| 130 | 70 | nsv = PetscMin(n,PetscMin(p,m)); | |
| 131 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(PetscMalloc1(nsv,&w)); |
| 132 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSSolve(svd->ds,w,NULL)); |
| 133 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSSort(svd->ds,w,NULL,NULL,NULL,NULL)); |
| 134 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSSynchronize(svd->ds,w,NULL)); |
| 135 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSGetDimensions(svd->ds,NULL,NULL,NULL,&nsv)); |
| 136 | |||
| 137 | /* copy singular vectors */ | ||
| 138 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatGetOwnershipRange(svd->OP,&lowu,NULL)); |
| 139 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatGetOwnershipRange(svd->OPb,&lowv,NULL)); |
| 140 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSGetArray(svd->ds,DS_MAT_X,&X)); |
| 141 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSGetArray(svd->ds,DS_MAT_U,&U)); |
| 142 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSGetArray(svd->ds,DS_MAT_V,&V)); |
| 143 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | for (j=0;j<nsv;j++) { |
| 144 | 910 | svd->sigma[j] = PetscRealPart(w[j]); | |
| 145 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(BVGetColumn(svd->V,j,&x)); |
| 146 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(VecGetOwnershipRange(x,&lowx,&highx)); |
| 147 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(VecGetArrayWrite(x,&px)); |
| 148 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
17760 | for (i=lowx;i<highx;i++) px[i-lowx] = X[i+j*ld]; |
| 149 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(VecRestoreArrayWrite(x,&px)); |
| 150 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(BVRestoreColumn(svd->V,j,&x)); |
| 151 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(BVGetColumn(svd->U,j,&uv)); |
| 152 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(VecGetArrayWrite(uv,&puv)); |
| 153 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
17010 | for (i=0;i<mlocal;i++) puv[i] = U[i+lowu+j*ld]; |
| 154 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
18770 | for (i=0;i<plocal;i++) puv[i+mlocal] = V[i+lowv+j*ld]; |
| 155 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(VecRestoreArrayWrite(uv,&puv)); |
| 156 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
910 | PetscCall(BVRestoreColumn(svd->U,j,&uv)); |
| 157 | } | ||
| 158 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSRestoreArray(svd->ds,DS_MAT_X,&X)); |
| 159 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSRestoreArray(svd->ds,DS_MAT_U,&U)); |
| 160 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(DSRestoreArray(svd->ds,DS_MAT_V,&V)); |
| 161 | |||
| 162 | 70 | svd->nconv = nsv; | |
| 163 | 70 | svd->its = 1; | |
| 164 | 70 | svd->reason = SVD_CONVERGED_TOL; | |
| 165 | |||
| 166 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatDestroy(&A)); |
| 167 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
70 | PetscCall(MatDestroy(&B)); |
| 168 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
70 | PetscCall(PetscFree(w)); |
| 169 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
14 | PetscFunctionReturn(PETSC_SUCCESS); |
| 170 | } | ||
| 171 | |||
| 172 | 11 | static PetscErrorCode SVDSolve_LAPACK_HSVD(SVD svd) | |
| 173 | { | ||
| 174 | 11 | PetscInt M,N,n,i,j,k,ld,lowu,lowv,highu,highv; | |
| 175 | 11 | Mat A,Ar,mat,D; | |
| 176 | 11 | Vec u,v,vomega; | |
| 177 | 11 | PetscScalar *pU,*pV,*pu,*pv,*w; | |
| 178 | 11 | PetscReal *pD; | |
| 179 | |||
| 180 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
11 | PetscFunctionBegin; |
| 181 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSGetLeadingDimension(svd->ds,&ld)); |
| 182 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(MatCreateRedundantMatrix(svd->OP,0,PETSC_COMM_SELF,MAT_INITIAL_MATRIX,&Ar)); |
| 183 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(MatConvert(Ar,MATSEQDENSE,MAT_INITIAL_MATRIX,&mat)); |
| 184 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(MatDestroy(&Ar)); |
| 185 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(MatGetSize(mat,&M,&N)); |
| 186 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSSetDimensions(svd->ds,M,0,0)); |
| 187 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSHSVDSetDimensions(svd->ds,N)); |
| 188 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSGetMat(svd->ds,DS_MAT_A,&A)); |
| 189 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(MatCopy(mat,A,SAME_NONZERO_PATTERN)); |
| 190 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSRestoreMat(svd->ds,DS_MAT_A,&A)); |
| 191 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSGetMatAndColumn(svd->ds,DS_MAT_D,0,&D,&vomega)); |
| 192 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(VecCopy(svd->omega,vomega)); |
| 193 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSRestoreMatAndColumn(svd->ds,DS_MAT_D,0,&D,&vomega)); |
| 194 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSSetState(svd->ds,DS_STATE_RAW)); |
| 195 | |||
| 196 | 11 | n = PetscMin(M,N); | |
| 197 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(PetscMalloc1(n,&w)); |
| 198 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSSolve(svd->ds,w,NULL)); |
| 199 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSSort(svd->ds,w,NULL,NULL,NULL,NULL)); |
| 200 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSSynchronize(svd->ds,w,NULL)); |
| 201 | |||
| 202 | /* copy singular vectors */ | ||
| 203 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSGetArrayReal(svd->ds,DS_MAT_D,&pD)); |
| 204 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSGetArray(svd->ds,DS_MAT_U,&pU)); |
| 205 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSGetArray(svd->ds,DS_MAT_V,&pV)); |
| 206 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
2931 | for (i=0;i<n;i++) { |
| 207 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 6 times.
|
2920 | if (svd->which == SVD_SMALLEST) k = n - i - 1; |
| 208 | else k = i; | ||
| 209 | 2920 | svd->sigma[k] = PetscRealPart(w[i]); | |
| 210 | 2920 | svd->sign[k] = pD[i]; | |
| 211 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(BVGetColumn(svd->U,k,&u)); |
| 212 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(BVGetColumn(svd->V,k,&v)); |
| 213 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(VecGetOwnershipRange(u,&lowu,&highu)); |
| 214 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(VecGetOwnershipRange(v,&lowv,&highv)); |
| 215 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(VecGetArray(u,&pu)); |
| 216 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(VecGetArray(v,&pv)); |
| 217 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
2920 | if (M>=N) { |
| 218 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
2186280 | for (j=lowu;j<highu;j++) pu[j-lowu] = pU[i*ld+j]; |
| 219 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
817320 | for (j=lowv;j<highv;j++) pv[j-lowv] = pV[i*ld+j]; |
| 220 | } else { | ||
| 221 | ✗ | for (j=lowu;j<highu;j++) pu[j-lowu] = pV[i*ld+j]; | |
| 222 | ✗ | for (j=lowv;j<highv;j++) pv[j-lowv] = pU[i*ld+j]; | |
| 223 | } | ||
| 224 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(VecRestoreArray(u,&pu)); |
| 225 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(VecRestoreArray(v,&pv)); |
| 226 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(BVRestoreColumn(svd->U,k,&u)); |
| 227 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2920 | PetscCall(BVRestoreColumn(svd->V,k,&v)); |
| 228 | } | ||
| 229 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSRestoreArrayReal(svd->ds,DS_MAT_D,&pD)); |
| 230 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSRestoreArray(svd->ds,DS_MAT_U,&pU)); |
| 231 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(DSRestoreArray(svd->ds,DS_MAT_V,&pV)); |
| 232 | |||
| 233 | 11 | svd->nconv = n; | |
| 234 | 11 | svd->its = 1; | |
| 235 | 11 | svd->reason = SVD_CONVERGED_TOL; | |
| 236 | |||
| 237 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(MatDestroy(&mat)); |
| 238 |
5/8✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
11 | PetscCall(PetscFree(w)); |
| 239 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
3 | PetscFunctionReturn(PETSC_SUCCESS); |
| 240 | } | ||
| 241 | |||
| 242 | 404 | static PetscErrorCode SVDSetDSType_LAPACK(SVD svd) | |
| 243 | { | ||
| 244 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
404 | PetscFunctionBegin; |
| 245 |
9/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
656 | PetscCall(DSSetType(svd->ds,svd->OPb?DSGSVD:svd->omega?DSHSVD:DSSVD)); |
| 246 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
84 | PetscFunctionReturn(PETSC_SUCCESS); |
| 247 | } | ||
| 248 | |||
| 249 | /*MC | ||
| 250 | SVDLAPACK - SVDLAPACK = "lapack" - A wrapper to LAPACK singular value solvers. | ||
| 251 | |||
| 252 | Notes: | ||
| 253 | This is not really a full-featured singular value solver but simply an interface to | ||
| 254 | some LAPACK routines {cite:p}`And99`. These routines operate sequentially | ||
| 255 | in dense mode and therefore are suitable only for small size problems. | ||
| 256 | This solver should be used only for debugging purposes. | ||
| 257 | |||
| 258 | The LAPACK routine is not called directly, instead a `DS` object of | ||
| 259 | the appropriate type is set up. | ||
| 260 | |||
| 261 | Level: beginner | ||
| 262 | |||
| 263 | .seealso: [](ch:svd), `SVD`, `SVDType`, `SVDSetType()`, `DS` | ||
| 264 | M*/ | ||
| 265 | 177 | SLEPC_EXTERN PetscErrorCode SVDCreate_LAPACK(SVD svd) | |
| 266 | { | ||
| 267 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
177 | PetscFunctionBegin; |
| 268 | 177 | svd->ops->setup = SVDSetUp_LAPACK; | |
| 269 | 177 | svd->ops->solve = SVDSolve_LAPACK; | |
| 270 | 177 | svd->ops->solveg = SVDSolve_LAPACK_GSVD; | |
| 271 | 177 | svd->ops->solveh = SVDSolve_LAPACK_HSVD; | |
| 272 | 177 | svd->ops->setdstype = SVDSetDSType_LAPACK; | |
| 273 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
177 | PetscFunctionReturn(PETSC_SUCCESS); |
| 274 | } | ||
| 275 |