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 | 177 | SLEPC_EXTERN PetscErrorCode SVDCreate_LAPACK(SVD svd) | |
250 | { | ||
251 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
177 | PetscFunctionBegin; |
252 | 177 | svd->ops->setup = SVDSetUp_LAPACK; | |
253 | 177 | svd->ops->solve = SVDSolve_LAPACK; | |
254 | 177 | svd->ops->solveg = SVDSolve_LAPACK_GSVD; | |
255 | 177 | svd->ops->solveh = SVDSolve_LAPACK_HSVD; | |
256 | 177 | svd->ops->setdstype = SVDSetDSType_LAPACK; | |
257 |
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); |
258 | } | ||
259 |