GCC Code Coverage Report


Directory: ./
File: src/eps/impls/davidson/dvdupdatev.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 223 241 92.5%
Functions: 9 9 100.0%
Branches: 429 808 53.1%

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 eigensolver: "davidson"
12
13 Step: test for restarting, updateV, restartV
14 */
15
16 #include "davidson.h"
17
18 typedef struct {
19 PetscInt min_size_V; /* restart with this number of eigenvectors */
20 PetscInt plusk; /* at restart, save plusk vectors from last iteration */
21 PetscInt mpd; /* max size of the searching subspace */
22 void *old_updateV_data; /* old updateV data */
23 PetscErrorCode (*old_isRestarting)(dvdDashboard*,PetscBool*); /* old isRestarting */
24 Mat oldU; /* previous projected right igenvectors */
25 Mat oldV; /* previous projected left eigenvectors */
26 PetscInt size_oldU; /* size of oldU */
27 PetscBool allResiduals; /* if computing all the residuals */
28 } dvdManagV_basic;
29
30 980 static PetscErrorCode dvd_updateV_start(dvdDashboard *d)
31 {
32 980 dvdManagV_basic *data = (dvdManagV_basic*)d->updateV_data;
33 980 PetscInt i;
34
35
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
980 PetscFunctionBegin;
36
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
19958 for (i=0;i<d->eps->ncv;i++) d->eigi[i] = 0.0;
37 980 d->nR = d->real_nR;
38
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
19958 for (i=0;i<d->eps->ncv;i++) d->nR[i] = 1.0;
39 980 d->nX = d->real_nX;
40
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
19958 for (i=0;i<d->eps->ncv;i++) d->errest[i] = 1.0;
41 980 data->size_oldU = 0;
42 980 d->nconv = 0;
43 980 d->npreconv = 0;
44 980 d->V_tra_s = d->V_tra_e = d->V_new_s = d->V_new_e = 0;
45 980 d->size_D = 0;
46
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.
980 PetscFunctionReturn(PETSC_SUCCESS);
47 }
48
49 85413 static PetscErrorCode dvd_isrestarting_fullV(dvdDashboard *d,PetscBool *r)
50 {
51 85413 PetscInt l,k;
52 85413 PetscBool restart;
53 85413 dvdManagV_basic *data = (dvdManagV_basic*)d->updateV_data;
54
55
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
85413 PetscFunctionBegin;
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.
85413 PetscCall(BVGetActiveColumns(d->eps->V,&l,&k));
57 85413 restart = (k+2 > d->eps->ncv)? PETSC_TRUE: PETSC_FALSE;
58
59 /* Check old isRestarting function */
60
3/10
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
85413 if (PetscUnlikely(!restart && data->old_isRestarting)) PetscCall(data->old_isRestarting(d,&restart));
61 85413 *r = restart;
62
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.
85413 PetscFunctionReturn(PETSC_SUCCESS);
63 }
64
65 980 static PetscErrorCode dvd_managementV_basic_d(dvdDashboard *d)
66 {
67 980 dvdManagV_basic *data = (dvdManagV_basic*)d->updateV_data;
68
69
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
980 PetscFunctionBegin;
70 /* Restore changes in dvdDashboard */
71 980 d->updateV_data = data->old_updateV_data;
72
73 /* Free local data */
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.
980 PetscCall(MatDestroy(&data->oldU));
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.
980 PetscCall(MatDestroy(&data->oldV));
76
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.
980 PetscCall(PetscFree(d->real_nR));
77
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.
980 PetscCall(PetscFree(d->real_nX));
78
6/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
980 PetscCall(PetscFree(data));
79
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.
192 PetscFunctionReturn(PETSC_SUCCESS);
80 }
81
82 3226 static PetscErrorCode dvd_updateV_conv_gen(dvdDashboard *d)
83 {
84 3226 dvdManagV_basic *data = (dvdManagV_basic*)d->updateV_data;
85 3226 PetscInt npreconv,cMT,cMTX,lV,kV,nV;
86 3226 Mat Z,Z0,Q,Q0;
87 3226 PetscBool t;
88 #if !defined(PETSC_USE_COMPLEX)
89 1588 PetscInt i;
90 #endif
91
92
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
3226 PetscFunctionBegin;
93 3226 npreconv = d->npreconv;
94 /* Constrains the converged pairs to nev */
95 #if !defined(PETSC_USE_COMPLEX)
96 /* Tries to maintain together conjugate eigenpairs */
97
5/6
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
3176 for (i=0; (i + (d->eigi[i]!=0.0?1:0) < npreconv) && (d->nconv + i < d->nev); i+= (d->eigi[i]!=0.0?2:1));
98 1588 npreconv = i;
99 #else
100 1638 npreconv = PetscMax(PetscMin(d->nev-d->nconv,npreconv),0);
101 #endif
102 /* For GHEP without B-ortho, converge all of the requested pairs at once */
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.
3226 PetscCall(PetscObjectTypeCompare((PetscObject)d->eps->ds,DSGHEP,&t));
104
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
3226 if (t && d->nconv+npreconv<d->nev) npreconv = 0;
105 /* Quick exit */
106
2/14
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
3226 if (npreconv == 0) PetscFunctionReturn(PETSC_SUCCESS);
107
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.
3226 PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV));
109 3226 nV = kV - lV;
110 3226 cMT = nV - npreconv;
111 /* Harmonics restarts with right eigenvectors, and other with the left ones.
112 If the problem is standard or hermitian, left and right vectors are the same */
113
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
3226 if (!(d->W||DVD_IS(d->sEP,DVD_EP_STD)||DVD_IS(d->sEP,DVD_EP_HERMITIAN))) {
114 /* ps.Q <- [ps.Q(0:npreconv-1) ps.Z(npreconv:size_H-1)] */
115 PetscCall(DSGetMat(d->eps->ds,DS_MAT_Q,&Q));
116 PetscCall(DSGetMat(d->eps->ds,DS_MAT_Z,&Z));
117 PetscCall(MatDenseGetSubMatrix(Q,0,npreconv,nV,npreconv+cMT,&Q0));
118 PetscCall(MatDenseGetSubMatrix(Z,0,npreconv,nV,npreconv+cMT,&Z0));
119 PetscCall(MatCopy(Z0,Q0,SAME_NONZERO_PATTERN));
120 PetscCall(MatDenseRestoreSubMatrix(Q,&Q0));
121 PetscCall(MatDenseRestoreSubMatrix(Z,&Z0));
122 PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Q,&Q));
123 PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Z,&Z));
124 }
125
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.
3226 if (DVD_IS(d->sEP,DVD_EP_INDEFINITE)) PetscCall(DSPseudoOrthogonalize(d->eps->ds,DS_MAT_Q,nV,d->nBds,&cMTX,d->nBds));
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.
3226 else PetscCall(DSOrthogonalize(d->eps->ds,DS_MAT_Q,nV,&cMTX));
127 3226 cMT = cMTX - npreconv;
128
129
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
3226 if (d->W) {
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.
528 PetscCall(DSOrthogonalize(d->eps->ds,DS_MAT_Z,nV,&cMTX));
131 528 cMT = PetscMin(cMT,cMTX - npreconv);
132 }
133
134 /* Lock the converged pairs */
135 3226 d->eigr+= npreconv;
136 #if !defined(PETSC_USE_COMPLEX)
137
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
1588 if (d->eigi) d->eigi+= npreconv;
138 #endif
139 3226 d->nconv+= npreconv;
140 3226 d->errest+= npreconv;
141 /* Notify the changes in V and update the other subspaces */
142 3226 d->V_tra_s = npreconv; d->V_tra_e = nV;
143 3226 d->V_new_s = cMT; d->V_new_e = d->V_new_s;
144 /* Remove oldU */
145 3226 data->size_oldU = 0;
146
147 3226 d->npreconv-= npreconv;
148
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.
3226 PetscFunctionReturn(PETSC_SUCCESS);
149 }
150
151 11844 static PetscErrorCode dvd_updateV_restart_gen(dvdDashboard *d)
152 {
153 11844 dvdManagV_basic *data = (dvdManagV_basic*)d->updateV_data;
154 11844 PetscInt lV,kV,nV,size_plusk,size_X,cMTX,cMTY,max_restart_size;
155 11844 Mat Q,Q0,Z,Z0,U,V;
156
157
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11844 PetscFunctionBegin;
158 /* Select size_X desired pairs from V */
159 /* The restarted basis should:
160 - have at least one spot to add a new direction;
161 - keep converged vectors, npreconv;
162 - keep at least 1 oldU direction if possible.
163 */
164
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.
11844 PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV));
165 11844 nV = kV - lV;
166
5/6
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
11844 max_restart_size = PetscMax(0,PetscMin(d->eps->mpd - 1,d->eps->ncv - lV - 2));
167
4/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
11844 size_X = PetscMin(PetscMin(data->min_size_V+d->npreconv,max_restart_size - (max_restart_size - d->npreconv > 1 && data->plusk > 0 && data->size_oldU > 0 ? 1 : 0)), nV);
168
169 /* Add plusk eigenvectors from the previous iteration */
170 11844 size_plusk = PetscMax(0,PetscMin(PetscMin(PetscMin(data->plusk,data->size_oldU),max_restart_size - size_X),nV - size_X));
171
172 11844 d->size_MT = nV;
173 /* ps.Q <- orth([pX(0:size_X-1) [oldU(0:size_plusk-1); 0] ]) */
174 /* Harmonics restarts with right eigenvectors, and other with the left ones.
175 If the problem is standard or hermitian, left and right vectors are the same */
176
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
11844 if (!(d->W||DVD_IS(d->sEP,DVD_EP_STD)||DVD_IS(d->sEP,DVD_EP_HERMITIAN))) {
177 PetscCall(DSGetMat(d->eps->ds,DS_MAT_Q,&Q));
178 PetscCall(DSGetMat(d->eps->ds,DS_MAT_Z,&Z));
179 PetscCall(MatDenseGetSubMatrix(Q,0,nV,0,size_X,&Q0));
180 PetscCall(MatDenseGetSubMatrix(Z,0,nV,0,size_X,&Z0));
181 PetscCall(MatCopy(Z0,Q0,SAME_NONZERO_PATTERN));
182 PetscCall(MatDenseRestoreSubMatrix(Q,&Q0));
183 PetscCall(MatDenseRestoreSubMatrix(Z,&Z0));
184 PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Q,&Q));
185 PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Z,&Z));
186 }
187
3/6
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
11844 PetscCheck(size_plusk<=0 || !DVD_IS(d->sEP,DVD_EP_INDEFINITE),PETSC_COMM_SELF,PETSC_ERR_SUP,"Unsupported plusk>0 in indefinite eigenvalue problems");
188
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
11761 if (size_plusk > 0) {
189
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.
11679 PetscCall(DSGetMat(d->eps->ds,DS_MAT_Q,&Q));
190
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.
11679 PetscCall(MatDenseGetSubMatrix(Q,0,nV,size_X,size_X+size_plusk,&Q0));
191
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.
11679 PetscCall(MatDenseGetSubMatrix(data->oldU,0,nV,0,size_plusk,&U));
192
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.
11679 PetscCall(MatCopy(U,Q0,SAME_NONZERO_PATTERN));
193
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.
11679 PetscCall(MatDenseRestoreSubMatrix(Q,&Q0));
194
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.
11679 PetscCall(MatDenseRestoreSubMatrix(data->oldU,&U));
195
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.
11679 PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Q,&Q));
196 }
197
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.
11844 if (DVD_IS(d->sEP,DVD_EP_INDEFINITE)) PetscCall(DSPseudoOrthogonalize(d->eps->ds,DS_MAT_Q,size_X,d->nBds,&cMTX,d->nBds));
198
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.
11844 else PetscCall(DSOrthogonalize(d->eps->ds,DS_MAT_Q,size_X+size_plusk,&cMTX));
199
200
4/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
11844 if (d->W && size_plusk > 0) {
201 /* ps.Z <- orth([ps.Z(0:size_X-1) [oldV(0:size_plusk-1); 0] ]) */
202
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.
1309 PetscCall(DSGetMat(d->eps->ds,DS_MAT_Z,&Z));
203
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.
1309 PetscCall(MatDenseGetSubMatrix(Z,0,nV,size_X,size_X+size_plusk,&Z0));
204
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.
1309 PetscCall(MatDenseGetSubMatrix(data->oldV,0,nV,0,size_plusk,&V));
205
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.
1309 PetscCall(MatCopy(V,Z0,SAME_NONZERO_PATTERN));
206
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.
1309 PetscCall(MatDenseRestoreSubMatrix(Z,&Z0));
207
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.
1309 PetscCall(MatDenseRestoreSubMatrix(data->oldV,&V));
208
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.
1309 PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Z,&Z));
209
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.
1309 PetscCall(DSOrthogonalize(d->eps->ds,DS_MAT_Z,size_X+size_plusk,&cMTY));
210 1309 cMTX = PetscMin(cMTX, cMTY);
211 }
212
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
11844 PetscAssert(cMTX<=size_X+size_plusk,PETSC_COMM_SELF,PETSC_ERR_SUP,"Invalid number of columns to restart");
213
214 /* Notify the changes in V and update the other subspaces */
215 11844 d->V_tra_s = 0; d->V_tra_e = cMTX;
216 11844 d->V_new_s = d->V_tra_e; d->V_new_e = d->V_new_s;
217
218 /* Remove oldU */
219 11844 data->size_oldU = 0;
220
221 /* Remove npreconv */
222 11844 d->npreconv = 0;
223
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.
11844 PetscFunctionReturn(PETSC_SUCCESS);
224 }
225
226 143912 static PetscErrorCode dvd_updateV_testConv(dvdDashboard *d,PetscInt s,PetscInt pre,PetscInt e,PetscInt *nConv)
227 {
228 143912 PetscInt i,j,b;
229 143912 PetscReal norm;
230 143912 PetscBool conv, c;
231 143912 dvdManagV_basic *data = (dvdManagV_basic*)d->updateV_data;
232
233
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
143912 PetscFunctionBegin;
234
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
143912 if (nConv) *nConv = s;
235
5/6
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
242692 for (i=s,conv=PETSC_TRUE;(conv || data->allResiduals) && (i < e);i+=b) {
236 #if !defined(PETSC_USE_COMPLEX)
237
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
46151 b = d->eigi[i]!=0.0?2:1;
238 #else
239 52629 b = 1;
240 #endif
241
5/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
98780 if (i+b-1 >= pre) PetscCall(d->calcpairs_residual(d,i,i+b));
242 /* Test the Schur vector */
243
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
197570 for (j=0,c=PETSC_TRUE;j<b && c;j++) {
244 98790 norm = d->nR[i+j]/d->nX[i+j];
245 98790 c = d->testConv(d,d->eigr[i+j],d->eigi[i+j],norm,&d->errest[i+j]);
246 }
247
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
98780 if (conv && c) {
248
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
3252 if (nConv) *nConv = i+b;
249 } else conv = PETSC_FALSE;
250 }
251 143912 pre = PetscMax(pre,i);
252
253 #if !defined(PETSC_USE_COMPLEX)
254 /* Enforce converged conjugate complex eigenpairs */
255
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
66810 if (nConv) {
256
4/4
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
35787 for (j=0;j<*nConv;j++) if (d->eigi[j] != 0.0) j++;
257
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
34199 if (j>*nConv) (*nConv)--;
258 }
259 #endif
260
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
145433 for (i=pre;i<e;i++) d->errest[i] = d->nR[i] = 1.0;
261
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.
27912 PetscFunctionReturn(PETSC_SUCCESS);
262 }
263
264 73569 static PetscErrorCode dvd_updateV_update_gen(dvdDashboard *d)
265 {
266 73569 dvdManagV_basic *data = (dvdManagV_basic*)d->updateV_data;
267 73569 PetscInt size_D,s,lV,kV,nV;
268 73569 Mat Q,Q0,Z,Z0,U,V;
269
270
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
73569 PetscFunctionBegin;
271 /* Select the desired pairs */
272
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.
73569 PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV));
273 73569 nV = kV - lV;
274 73569 size_D = PetscMin(PetscMin(PetscMin(d->bs,nV),d->eps->ncv-nV),nV);
275
2/14
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
73569 if (size_D == 0) PetscFunctionReturn(PETSC_SUCCESS);
276
277 /* Fill V with D */
278
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.
73569 PetscCall(d->improveX(d,d->npreconv,d->npreconv+size_D,&size_D));
279
280 /* If D is empty, exit */
281 73569 d->size_D = size_D;
282
8/14
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
73569 if (size_D == 0) PetscFunctionReturn(PETSC_SUCCESS);
283
284 /* Get the residual of all pairs */
285 #if !defined(PETSC_USE_COMPLEX)
286
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
32611 s = (d->eigi[0]!=0.0)? 2: 1;
287 #else
288 37732 s = 1;
289 #endif
290
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.
70343 PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV));
291 70343 nV = kV - lV;
292
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.
70343 PetscCall(dvd_updateV_testConv(d,s,s,data->allResiduals?nV:size_D,NULL));
293
294 /* Notify the changes in V */
295 70343 d->V_tra_s = 0; d->V_tra_e = 0;
296 70343 d->V_new_s = nV; d->V_new_e = nV+size_D;
297
298 /* Save the projected eigenvectors */
299
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
70343 if (data->plusk > 0) {
300
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.
69910 PetscCall(MatZeroEntries(data->oldU));
301 69910 data->size_oldU = nV;
302
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.
69910 PetscCall(DSGetMat(d->eps->ds,DS_MAT_Q,&Q));
303
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.
69910 PetscCall(MatDenseGetSubMatrix(Q,0,nV,0,nV,&Q0));
304
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.
69910 PetscCall(MatDenseGetSubMatrix(data->oldU,0,nV,0,nV,&U));
305
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.
69910 PetscCall(MatCopy(Q0,U,SAME_NONZERO_PATTERN));
306
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.
69910 PetscCall(MatDenseRestoreSubMatrix(Q,&Q0));
307
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.
69910 PetscCall(MatDenseRestoreSubMatrix(data->oldU,&U));
308
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.
69910 PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Q,&Q));
309
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
69910 if (d->W) {
310
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.
10228 PetscCall(MatZeroEntries(data->oldV));
311
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.
10228 PetscCall(DSGetMat(d->eps->ds,DS_MAT_Z,&Z));
312
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.
10228 PetscCall(MatDenseGetSubMatrix(Z,0,nV,0,nV,&Z0));
313
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.
10228 PetscCall(MatDenseGetSubMatrix(data->oldV,0,nV,0,nV,&V));
314
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.
10228 PetscCall(MatCopy(Z0,V,SAME_NONZERO_PATTERN));
315
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.
10228 PetscCall(MatDenseRestoreSubMatrix(Z,&Z0));
316
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.
10228 PetscCall(MatDenseRestoreSubMatrix(data->oldV,&V));
317
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.
10228 PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Z,&Z));
318 }
319 }
320
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.
13643 PetscFunctionReturn(PETSC_SUCCESS);
321 }
322
323 85413 static PetscErrorCode dvd_updateV_extrapol(dvdDashboard *d)
324 {
325 85413 dvdManagV_basic *data = (dvdManagV_basic*)d->updateV_data;
326 85413 PetscInt i;
327 85413 PetscBool restart,t;
328
329
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
85413 PetscFunctionBegin;
330 /* TODO: restrict select pairs to each case */
331
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.
85413 PetscCall(d->calcpairs_selectPairs(d, data->min_size_V+d->npreconv));
332
333 /* If the subspaces doesn't need restart, add new vector */
334
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.
85413 PetscCall(d->isRestarting(d,&restart));
335
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
85413 if (!restart) {
336 73569 d->size_D = 0;
337
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.
73569 PetscCall(dvd_updateV_update_gen(d));
338
339 /* If no vector were converged, exit */
340 /* For GHEP without B-ortho, converge all of the requested pairs at once */
341
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.
73569 PetscCall(PetscObjectTypeCompare((PetscObject)d->eps->ds,DSGHEP,&t));
342
11/18
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
73569 if (d->nconv+d->npreconv < d->nev && (t || d->npreconv == 0)) PetscFunctionReturn(PETSC_SUCCESS);
343 }
344
345 /* If some eigenpairs were converged, lock them */
346
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
15070 if (d->npreconv > 0) {
347 3226 i = d->npreconv;
348
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.
3226 PetscCall(dvd_updateV_conv_gen(d));
349
350 /* If some eigenpair was locked, exit */
351
8/14
✓ 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.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
3226 if (i > d->npreconv) PetscFunctionReturn(PETSC_SUCCESS);
352 }
353
354 /* Else, a restarting is performed */
355
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.
11844 PetscCall(dvd_updateV_restart_gen(d));
356
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.
2350 PetscFunctionReturn(PETSC_SUCCESS);
357 }
358
359 2940 PetscErrorCode dvd_managementV_basic(dvdDashboard *d,dvdBlackboard *b,PetscInt bs,PetscInt mpd,PetscInt min_size_V,PetscInt plusk,PetscBool harm,PetscBool allResiduals)
360 {
361 2940 dvdManagV_basic *data;
362 #if !defined(PETSC_USE_COMPLEX)
363 1455 PetscBool her_probl,std_probl;
364 #endif
365
366
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2940 PetscFunctionBegin;
367 /* Setting configuration constrains */
368 #if !defined(PETSC_USE_COMPLEX)
369 /* if the last converged eigenvalue is complex its conjugate pair is also
370 converged */
371 1455 her_probl = DVD_IS(d->sEP,DVD_EP_HERMITIAN)? PETSC_TRUE: PETSC_FALSE;
372 1455 std_probl = DVD_IS(d->sEP,DVD_EP_STD)? PETSC_TRUE: PETSC_FALSE;
373 1455 b->max_size_X = PetscMax(b->max_size_X,bs+((her_probl && std_probl)?0:1));
374 #else
375 1485 b->max_size_X = PetscMax(b->max_size_X,bs);
376 #endif
377
378 2940 b->max_size_V = PetscMax(b->max_size_V,mpd);
379 2940 min_size_V = PetscMin(min_size_V,mpd-bs);
380 2940 b->size_V = PetscMax(b->size_V,b->max_size_V+b->max_size_P+b->max_nev);
381 2940 b->max_size_oldX = plusk;
382
383 /* Setup the step */
384
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2940 if (b->state >= DVD_STATE_CONF) {
385
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.
980 PetscCall(PetscNew(&data));
386 980 data->mpd = b->max_size_V;
387 980 data->min_size_V = min_size_V;
388 980 d->bs = bs;
389 980 data->plusk = plusk;
390 980 data->allResiduals = allResiduals;
391
392 980 d->eigr = d->eps->eigr;
393 980 d->eigi = d->eps->eigi;
394 980 d->errest = d->eps->errest;
395
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.
980 PetscCall(PetscMalloc1(d->eps->ncv,&d->real_nR));
396
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.
980 PetscCall(PetscMalloc1(d->eps->ncv,&d->real_nX));
397
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
980 if (plusk > 0) PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,d->eps->ncv,d->eps->ncv,NULL,&data->oldU));
398 20 else data->oldU = NULL;
399
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
980 if (harm && plusk>0) PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,d->eps->ncv,d->eps->ncv,NULL,&data->oldV));
400 782 else data->oldV = NULL;
401
402 980 data->old_updateV_data = d->updateV_data;
403 980 d->updateV_data = data;
404 980 data->old_isRestarting = d->isRestarting;
405 980 d->isRestarting = dvd_isrestarting_fullV;
406 980 d->updateV = dvd_updateV_extrapol;
407 980 d->preTestConv = dvd_updateV_testConv;
408
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.
980 PetscCall(EPSDavidsonFLAdd(&d->startList,dvd_updateV_start));
409
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.
980 PetscCall(EPSDavidsonFLAdd(&d->destroyList,dvd_managementV_basic_d));
410 }
411
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.
576 PetscFunctionReturn(PETSC_SUCCESS);
412 }
413