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 | SLEPc singular value solver: "randomized" | ||
12 | |||
13 | Method: RSVD | ||
14 | |||
15 | Algorithm: | ||
16 | |||
17 | Randomized singular value decomposition. | ||
18 | |||
19 | References: | ||
20 | |||
21 | [1] N. Halko, P.-G. Martinsson, and J. A. Tropp, "Finding | ||
22 | structure with randomness: Probabilistic algorithms for | ||
23 | constructing approximate matrix decompositions", SIAM Rev., | ||
24 | 53(2):217-288, 2011. | ||
25 | */ | ||
26 | |||
27 | #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/ | ||
28 | |||
29 | 109 | static PetscErrorCode SVDSetUp_Randomized(SVD svd) | |
30 | { | ||
31 | 109 | PetscInt N; | |
32 | |||
33 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
109 | PetscFunctionBegin; |
34 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109 | SVDCheckStandard(svd); |
35 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109 | SVDCheckDefinite(svd); |
36 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109 | SVDCheckUnsupported(svd,SVD_FEATURE_THRESHOLD); |
37 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109 | PetscCheck(svd->which==SVD_LARGEST,PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"This solver supports only largest singular values"); |
38 |
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.
|
109 | PetscCall(MatGetSize(svd->A,NULL,&N)); |
39 |
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.
|
109 | PetscCall(SVDSetDimensions_Default(svd)); |
40 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109 | PetscCheck(svd->ncv>=svd->nsv,PetscObjectComm((PetscObject)svd),PETSC_ERR_USER_INPUT,"The value of ncv must not be smaller than nsv"); |
41 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
109 | if (svd->max_it==PETSC_DETERMINE) svd->max_it = PetscMax(N/svd->ncv,100); |
42 | 109 | svd->leftbasis = PETSC_TRUE; | |
43 | 109 | svd->mpd = svd->ncv; | |
44 |
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.
|
109 | PetscCall(SVDAllocateSolution(svd,0)); |
45 |
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.
|
109 | PetscCall(DSSetType(svd->ds,DSSVD)); |
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.
|
109 | PetscCall(DSAllocate(svd->ds,svd->ncv)); |
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.
|
109 | PetscCall(SVDSetWorkVecs(svd,1,1)); |
48 |
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.
|
21 | PetscFunctionReturn(PETSC_SUCCESS); |
49 | } | ||
50 | |||
51 | 3756 | static PetscErrorCode SVDRandomizedResidualNorm(SVD svd,PetscInt i,PetscScalar sigma,PetscReal *res) | |
52 | { | ||
53 | 3756 | PetscReal norm1,norm2; | |
54 | 3756 | Vec u,v,wu,wv; | |
55 | |||
56 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3756 | PetscFunctionBegin; |
57 | 3756 | *res = 1.0; | |
58 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3756 | if (svd->conv!=SVD_CONV_MAXIT) { |
59 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3738 | wu = svd->swapped? svd->workr[0]: svd->workl[0]; |
60 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3738 | wv = svd->swapped? svd->workl[0]: svd->workr[0]; |
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.
|
3738 | PetscCall(BVGetColumn(svd->V,i,&v)); |
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.
|
3738 | PetscCall(BVGetColumn(svd->U,i,&u)); |
63 | /* norm1 = ||A*v-sigma*u||_2 */ | ||
64 |
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.
|
3738 | PetscCall(MatMult(svd->A,v,wu)); |
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.
|
3738 | PetscCall(VecAXPY(wu,-sigma,u)); |
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.
|
3738 | PetscCall(VecNorm(wu,NORM_2,&norm1)); |
67 | /* norm2 = ||A^T*u-sigma*v||_2 */ | ||
68 |
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.
|
3738 | PetscCall(MatMult(svd->AT,u,wv)); |
69 |
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.
|
3738 | PetscCall(VecAXPY(wv,-sigma,v)); |
70 |
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.
|
3738 | PetscCall(VecNorm(wv,NORM_2,&norm2)); |
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.
|
3738 | PetscCall(BVRestoreColumn(svd->V,i,&v)); |
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.
|
3738 | PetscCall(BVRestoreColumn(svd->U,i,&u)); |
73 | 3738 | *res = SlepcAbs(norm1,norm2); | |
74 | } | ||
75 |
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.
|
696 | PetscFunctionReturn(PETSC_SUCCESS); |
76 | } | ||
77 | |||
78 | /* If A is a virtual Hermitian transpose, then BVMatMult will fail if PRODUCT_AhB is not implemented */ | ||
79 | 6744 | static PetscErrorCode BlockMatMult(BV V,Mat A,BV Y,Mat AT) | |
80 | { | ||
81 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
6744 | PetscFunctionBegin; |
82 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
6744 | if (!PetscDefined(USE_COMPLEX)) PetscCall(BVMatMult(V,A,Y)); |
83 | else { | ||
84 | 3066 | PetscBool flg=PETSC_FALSE; | |
85 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
3066 | PetscCall(PetscObjectTypeCompare((PetscObject)A,MATHERMITIANTRANSPOSEVIRTUAL,&flg)); |
86 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
3066 | if (flg) PetscCall(BVMatMultHermitianTranspose(V,AT,Y)); |
87 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2961 | else PetscCall(BVMatMult(V,A,Y)); |
88 | } | ||
89 |
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.
|
3754 | PetscFunctionReturn(PETSC_SUCCESS); |
90 | } | ||
91 | |||
92 | 109 | static PetscErrorCode SVDSolve_Randomized(SVD svd) | |
93 | { | ||
94 | 109 | PetscScalar *w; | |
95 | 109 | PetscReal res=1.0; | |
96 | 109 | PetscInt i,k=0; | |
97 | 109 | Mat A,U,V; | |
98 | |||
99 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
109 | PetscFunctionBegin; |
100 | /* Form random matrix, G. Complete the initial basis with random vectors */ | ||
101 |
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.
|
109 | PetscCall(BVSetActiveColumns(svd->V,svd->nini,svd->ncv)); |
102 |
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.
|
109 | PetscCall(BVSetRandomNormal(svd->V)); |
103 |
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.
|
109 | PetscCall(PetscCalloc1(svd->ncv,&w)); |
104 | |||
105 | /* Subspace Iteration */ | ||
106 | 3372 | do { | |
107 | 3372 | svd->its++; | |
108 |
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.
|
3372 | PetscCall(BVSetActiveColumns(svd->V,svd->nconv,svd->ncv)); |
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.
|
3372 | PetscCall(BVSetActiveColumns(svd->U,svd->nconv,svd->ncv)); |
110 | /* Form AG */ | ||
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.
|
3372 | PetscCall(BlockMatMult(svd->V,svd->A,svd->U,svd->AT)); |
112 | /* Orthogonalization Q=qr(AG)*/ | ||
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.
|
3372 | PetscCall(BVOrthogonalize(svd->U,NULL)); |
114 | /* Form B^*= AQ */ | ||
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.
|
3372 | PetscCall(BlockMatMult(svd->U,svd->AT,svd->V,svd->A)); |
116 | |||
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.
|
3372 | PetscCall(DSSetDimensions(svd->ds,svd->ncv,svd->nconv,svd->ncv)); |
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.
|
3372 | PetscCall(DSSVDSetDimensions(svd->ds,svd->ncv)); |
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.
|
3372 | PetscCall(DSGetMat(svd->ds,DS_MAT_A,&A)); |
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.
|
3372 | PetscCall(MatZeroEntries(A)); |
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.
|
3372 | PetscCall(BVOrthogonalize(svd->V,A)); |
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.
|
3372 | PetscCall(DSRestoreMat(svd->ds,DS_MAT_A,&A)); |
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.
|
3372 | PetscCall(DSSetState(svd->ds,DS_STATE_RAW)); |
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.
|
3372 | PetscCall(DSSolve(svd->ds,w,NULL)); |
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.
|
3372 | PetscCall(DSSort(svd->ds,w,NULL,NULL,NULL,NULL)); |
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.
|
3372 | PetscCall(DSSynchronize(svd->ds,w,NULL)); |
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.
|
3372 | PetscCall(DSGetMat(svd->ds,DS_MAT_U,&U)); |
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.
|
3372 | PetscCall(DSGetMat(svd->ds,DS_MAT_V,&V)); |
129 |
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.
|
3372 | PetscCall(BVMultInPlace(svd->U,V,svd->nconv,svd->ncv)); |
130 |
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.
|
3372 | PetscCall(BVMultInPlace(svd->V,U,svd->nconv,svd->ncv)); |
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.
|
3372 | PetscCall(DSRestoreMat(svd->ds,DS_MAT_U,&U)); |
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.
|
3372 | PetscCall(DSRestoreMat(svd->ds,DS_MAT_V,&V)); |
133 | /* Check convergence */ | ||
134 | 3372 | k = 0; | |
135 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 6 times.
|
3762 | for (i=svd->nconv;i<svd->ncv;i++) { |
136 |
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.
|
3756 | PetscCall(SVDRandomizedResidualNorm(svd,i,w[i],&res)); |
137 | 3756 | svd->sigma[i] = PetscRealPart(w[i]); | |
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.
|
3756 | PetscCall((*svd->converged)(svd,svd->sigma[i],res,&svd->errest[i],svd->convergedctx)); |
139 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3756 | if (svd->errest[i] < svd->tol) k++; |
140 | else break; | ||
141 | } | ||
142 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
3372 | if (svd->conv == SVD_CONV_MAXIT && svd->its >= svd->max_it) { |
143 | 18 | k = svd->nsv; | |
144 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
198 | for (i=0;i<svd->ncv;i++) svd->sigma[i] = PetscRealPart(w[i]); |
145 | } | ||
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.
|
3372 | PetscCall((*svd->stopping)(svd,svd->its,svd->max_it,svd->nconv+k,svd->nsv,&svd->reason,svd->stoppingctx)); |
147 | 3372 | svd->nconv += k; | |
148 |
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.
|
3372 | PetscCall(SVDMonitor(svd,svd->its,svd->nconv,svd->sigma,svd->errest,svd->ncv)); |
149 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3372 | } while (svd->reason == SVD_CONVERGED_ITERATING); |
150 |
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.
|
109 | PetscCall(PetscFree(w)); |
151 |
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.
|
21 | PetscFunctionReturn(PETSC_SUCCESS); |
152 | } | ||
153 | |||
154 | 89 | SLEPC_EXTERN PetscErrorCode SVDCreate_Randomized(SVD svd) | |
155 | { | ||
156 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
89 | PetscFunctionBegin; |
157 | 89 | svd->ops->setup = SVDSetUp_Randomized; | |
158 | 89 | svd->ops->solve = SVDSolve_Randomized; | |
159 |
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.
|
89 | PetscFunctionReturn(PETSC_SUCCESS); |
160 | } | ||
161 |