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 | Skeleton of Davidson solver. Actual solvers are GD and JD. | ||
12 | |||
13 | References: | ||
14 | |||
15 | [1] E. Romero and J.E. Roman, "A parallel implementation of Davidson | ||
16 | methods for large-scale eigenvalue problems in SLEPc", ACM Trans. | ||
17 | Math. Software 40(2):13, 2014. | ||
18 | */ | ||
19 | |||
20 | #include "davidson.h" | ||
21 | |||
22 | static PetscBool cited = PETSC_FALSE; | ||
23 | static const char citation[] = | ||
24 | "@Article{slepc-davidson,\n" | ||
25 | " author = \"E. Romero and J. E. Roman\",\n" | ||
26 | " title = \"A parallel implementation of {Davidson} methods for large-scale eigenvalue problems in {SLEPc}\",\n" | ||
27 | " journal = \"{ACM} Trans. Math. Software\",\n" | ||
28 | " volume = \"40\",\n" | ||
29 | " number = \"2\",\n" | ||
30 | " pages = \"13:1--13:29\",\n" | ||
31 | " year = \"2014,\"\n" | ||
32 | " doi = \"https://doi.org/10.1145/2543696\"\n" | ||
33 | "}\n"; | ||
34 | |||
35 | 980 | PetscErrorCode EPSSetUp_XD(EPS eps) | |
36 | { | ||
37 | 980 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
38 | 980 | dvdDashboard *dvd = &data->ddb; | |
39 | 980 | dvdBlackboard b; | |
40 | 980 | PetscInt min_size_V,bs,initv,nmat; | |
41 | 980 | Mat A,B; | |
42 | 980 | KSP ksp; | |
43 | 980 | PetscBool ipB,ispositive; | |
44 | 980 | HarmType_t harm; | |
45 | 980 | InitType_t init; | |
46 | 980 | PetscScalar target; | |
47 | |||
48 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
980 | PetscFunctionBegin; |
49 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
980 | EPSCheckNotStructured(eps); |
50 | /* Setup EPS options and get the problem specification */ | ||
51 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (eps->nev==0) eps->nev = 1; |
52 | 980 | bs = data->blocksize; | |
53 | 980 | if (bs <= 0) bs = 1; | |
54 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (eps->ncv!=PETSC_DETERMINE) { |
55 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
426 | PetscCheck(eps->ncv>=eps->nev,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"The value of ncv must be at least nev"); |
56 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
554 | } else if (eps->mpd!=PETSC_DETERMINE) eps->ncv = eps->mpd + eps->nev + bs; |
57 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
544 | else if (eps->n < 10) eps->ncv = eps->n+eps->nev+bs; |
58 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
544 | else if (eps->nev < 500) eps->ncv = PetscMax(eps->nev,PetscMin(eps->n-bs,PetscMax(2*eps->nev,eps->nev+15))+bs); |
59 | ✗ | else eps->ncv = PetscMax(eps->nev,PetscMin(eps->n-bs,eps->nev+500)+bs); | |
60 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (eps->mpd==PETSC_DETERMINE) eps->mpd = PetscMin(eps->n,eps->ncv); |
61 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
980 | PetscCheck(eps->mpd<=eps->ncv,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"The mpd parameter has to be less than or equal to ncv"); |
62 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
980 | PetscCheck(eps->mpd>=2,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"The mpd parameter has to be greater than 2"); |
63 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (eps->max_it == PETSC_DETERMINE) eps->max_it = PetscMax(100*eps->ncv,2*eps->n); |
64 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (!eps->which) eps->which = EPS_LARGEST_MAGNITUDE; |
65 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
980 | PetscCheck(eps->nev+bs<=eps->ncv,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"The value of ncv has to be greater than nev plus blocksize"); |
66 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
980 | PetscCheck(!eps->trueres,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"-eps_true_residual is disabled in this solver."); |
67 |
8/18✓ 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 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 10 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
980 | EPSCheckUnsupported(eps,EPS_FEATURE_REGION | EPS_FEATURE_TWOSIDED | EPS_FEATURE_THRESHOLD); |
68 | |||
69 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
980 | if (!data->minv) data->minv = (eps->n && eps->n<10)? 1: PetscMin(PetscMax(bs,6),eps->mpd/2); |
70 | 980 | min_size_V = data->minv; | |
71 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
980 | PetscCheck(min_size_V+bs<=eps->mpd,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"The value of minv must be less than mpd minus blocksize"); |
72 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (data->plusk == PETSC_DETERMINE) { |
73 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
642 | if (eps->problem_type == EPS_GHIEP || eps->nev+bs>eps->ncv) data->plusk = 0; |
74 | 622 | else data->plusk = 1; | |
75 | } | ||
76 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
1614 | if (!data->initialsize) data->initialsize = (eps->n && eps->n<10)? 1: 6; |
77 | 980 | initv = data->initialsize; | |
78 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
980 | PetscCheck(eps->mpd>=initv,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"The initv parameter has to be less than or equal to mpd"); |
79 | |||
80 | /* Change the default sigma to inf if necessary */ | ||
81 |
7/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 3 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
980 | if (eps->which == EPS_LARGEST_MAGNITUDE || eps->which == EPS_LARGEST_REAL || eps->which == EPS_LARGEST_IMAGINARY) PetscCall(STSetDefaultShift(eps->st,PETSC_MAX_REAL)); |
82 | |||
83 | /* Set up preconditioner */ | ||
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.
|
980 | PetscCall(STSetUp(eps->st)); |
85 | |||
86 | /* Setup problem specification in dvd */ | ||
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.
|
980 | PetscCall(STGetNumMatrices(eps->st,&nmat)); |
88 |
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(STGetMatrix(eps->st,0,&A)); |
89 |
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 (nmat>1) PetscCall(STGetMatrix(eps->st,1,&B)); |
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.
|
980 | PetscCall(EPSReset_XD(eps)); |
91 |
4/6✓ Branch 0 taken 5 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(PetscMemzero(dvd,sizeof(dvdDashboard))); |
92 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | dvd->A = A; dvd->B = eps->isgeneralized? B: NULL; |
93 | 980 | ispositive = eps->ispositive; | |
94 |
5/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
1198 | dvd->sA = DVD_MAT_IMPLICIT | (eps->ishermitian? DVD_MAT_HERMITIAN: 0) | ((ispositive && !eps->isgeneralized) ? DVD_MAT_POS_DEF: 0); |
95 | /* Assume -eps_hermitian means hermitian-definite in generalized problems */ | ||
96 |
6/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
|
980 | if (!ispositive && !eps->isgeneralized && eps->ishermitian) ispositive = PETSC_TRUE; |
97 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (!eps->isgeneralized) dvd->sB = DVD_MAT_IMPLICIT | DVD_MAT_HERMITIAN | DVD_MAT_IDENTITY | DVD_MAT_UNITARY | DVD_MAT_POS_DEF; |
98 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
260 | else dvd->sB = DVD_MAT_IMPLICIT | (eps->ishermitian? DVD_MAT_HERMITIAN: 0) | (ispositive? DVD_MAT_POS_DEF: 0); |
99 |
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.
|
980 | ipB = (dvd->B && data->ipB && DVD_IS(dvd->sB,DVD_MAT_HERMITIAN))?PETSC_TRUE:PETSC_FALSE; |
100 |
9/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 10 times.
|
1262 | dvd->sEP = ((!eps->isgeneralized || (eps->isgeneralized && ipB))? DVD_EP_STD: 0) | (ispositive? DVD_EP_HERMITIAN: 0) | ((eps->problem_type == EPS_GHIEP && ipB) ? DVD_EP_INDEFINITE : 0); |
101 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
980 | if (data->ipB && !ipB) data->ipB = PETSC_FALSE; |
102 |
5/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
980 | dvd->correctXnorm = (dvd->B && (DVD_IS(dvd->sB,DVD_MAT_HERMITIAN)||DVD_IS(dvd->sEP,DVD_EP_INDEFINITE)))?PETSC_TRUE:PETSC_FALSE; |
103 | 980 | dvd->nev = eps->nev; | |
104 | 980 | dvd->which = eps->which; | |
105 | 980 | dvd->withTarget = PETSC_TRUE; | |
106 |
4/7✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
980 | switch (eps->which) { |
107 | 188 | case EPS_TARGET_MAGNITUDE: | |
108 | case EPS_TARGET_IMAGINARY: | ||
109 | 188 | dvd->target[0] = target = eps->target; | |
110 | 188 | dvd->target[1] = 1.0; | |
111 | 188 | break; | |
112 | ✗ | case EPS_TARGET_REAL: | |
113 | ✗ | dvd->target[0] = PetscRealPart(target = eps->target); | |
114 | ✗ | dvd->target[1] = 1.0; | |
115 | ✗ | break; | |
116 | 444 | case EPS_LARGEST_REAL: | |
117 | case EPS_LARGEST_MAGNITUDE: | ||
118 | case EPS_LARGEST_IMAGINARY: /* TODO: think about this case */ | ||
119 | 444 | dvd->target[0] = 1.0; | |
120 | 444 | dvd->target[1] = target = 0.0; | |
121 | 444 | break; | |
122 | 308 | case EPS_SMALLEST_MAGNITUDE: | |
123 | case EPS_SMALLEST_REAL: | ||
124 | case EPS_SMALLEST_IMAGINARY: /* TODO: think about this case */ | ||
125 | 308 | dvd->target[0] = target = 0.0; | |
126 | 308 | dvd->target[1] = 1.0; | |
127 | 308 | break; | |
128 | 40 | case EPS_WHICH_USER: | |
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.
|
40 | PetscCall(STGetShift(eps->st,&target)); |
130 | 40 | dvd->target[0] = target; | |
131 | 40 | dvd->target[1] = 1.0; | |
132 | 40 | break; | |
133 | ✗ | case EPS_ALL: | |
134 | ✗ | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"This solver does not support computing all eigenvalues"); | |
135 | ✗ | default: | |
136 | ✗ | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Unsupported value of option 'which'"); | |
137 | } | ||
138 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | dvd->tol = SlepcDefaultTol(eps->tol); |
139 | 980 | dvd->eps = eps; | |
140 | |||
141 | /* Setup the extraction technique */ | ||
142 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (!eps->extraction) { |
143 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
890 | if (ipB || ispositive) eps->extraction = EPS_RITZ; |
144 | else { | ||
145 |
3/3✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
|
158 | switch (eps->which) { |
146 | 60 | case EPS_TARGET_REAL: | |
147 | case EPS_TARGET_MAGNITUDE: | ||
148 | case EPS_TARGET_IMAGINARY: | ||
149 | case EPS_SMALLEST_MAGNITUDE: | ||
150 | case EPS_SMALLEST_REAL: | ||
151 | case EPS_SMALLEST_IMAGINARY: | ||
152 | 60 | eps->extraction = EPS_HARMONIC; | |
153 | 60 | break; | |
154 | 68 | case EPS_LARGEST_REAL: | |
155 | case EPS_LARGEST_MAGNITUDE: | ||
156 | case EPS_LARGEST_IMAGINARY: | ||
157 | 68 | eps->extraction = EPS_HARMONIC_LARGEST; | |
158 | 68 | break; | |
159 | 30 | default: | |
160 | 30 | eps->extraction = EPS_RITZ; | |
161 | } | ||
162 | 18 | } | |
163 | } | ||
164 |
3/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
|
980 | switch (eps->extraction) { |
165 | case EPS_RITZ: harm = DVD_HARM_NONE; break; | ||
166 | 130 | case EPS_HARMONIC: harm = DVD_HARM_RR; break; | |
167 | ✗ | case EPS_HARMONIC_RELATIVE: harm = DVD_HARM_RRR; break; | |
168 | ✗ | case EPS_HARMONIC_RIGHT: harm = DVD_HARM_REIGS; break; | |
169 | 88 | case EPS_HARMONIC_LARGEST: harm = DVD_HARM_LEIGS; break; | |
170 | ✗ | default: SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Unsupported extraction type"); | |
171 | } | ||
172 | |||
173 | /* Setup the type of starting subspace */ | ||
174 | 980 | init = data->krylovstart? DVD_INITV_KRYLOV: DVD_INITV_CLASSIC; | |
175 | |||
176 | /* Preconfigure dvd */ | ||
177 |
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(STGetKSP(eps->st,&ksp)); |
178 |
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(dvd_schm_basic_preconf(dvd,&b,eps->mpd,min_size_V,bs,initv,PetscAbs(eps->nini),data->plusk,harm,ksp,init,eps->trackall,data->ipB,data->doubleexp)); |
179 | |||
180 | /* Allocate memory */ | ||
181 |
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(EPSAllocateSolution(eps,0)); |
182 | |||
183 | /* Setup orthogonalization */ | ||
184 |
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(EPS_SetInnerProduct(eps)); |
185 |
7/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
980 | if (!(ipB && dvd->B)) PetscCall(BVSetMatrix(eps->V,NULL,PETSC_FALSE)); |
186 | |||
187 | /* Configure dvd for a basic GD */ | ||
188 |
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(dvd_schm_basic_conf(dvd,&b,eps->mpd,min_size_V,bs,initv,PetscAbs(eps->nini),data->plusk,harm,dvd->withTarget,target,ksp,data->fix,init,eps->trackall,data->ipB,data->dynamic,data->doubleexp)); |
189 |
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); |
190 | } | ||
191 | |||
192 | 980 | PetscErrorCode EPSSolve_XD(EPS eps) | |
193 | { | ||
194 | 980 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
195 | 980 | dvdDashboard *d = &data->ddb; | |
196 | 980 | PetscInt l,k; | |
197 | |||
198 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
980 | PetscFunctionBegin; |
199 |
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(PetscCitationsRegister(citation,&cited)); |
200 | /* Call the starting routines */ | ||
201 |
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(EPSDavidsonFLCall(d->startList,d)); |
202 | |||
203 | 86393 | while (eps->reason == EPS_CONVERGED_ITERATING) { | |
204 | |||
205 | /* Initialize V, if it is needed */ | ||
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.
|
86393 | PetscCall(BVGetActiveColumns(d->eps->V,&l,&k)); |
207 |
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.
|
86393 | if (PetscUnlikely(l == k)) PetscCall(d->initV(d)); |
208 | |||
209 | /* Find the best approximated eigenpairs in V, X */ | ||
210 |
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.
|
86393 | PetscCall(d->calcPairs(d)); |
211 | |||
212 | /* Test for convergence */ | ||
213 |
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.
|
86393 | PetscCall((*eps->stopping)(eps,eps->its,eps->max_it,eps->nconv,eps->nev,&eps->reason,eps->stoppingctx)); |
214 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
86393 | if (eps->reason != EPS_CONVERGED_ITERATING) break; |
215 | |||
216 | /* Expand the subspace */ | ||
217 |
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->updateV(d)); |
218 | |||
219 | /* Monitor progress */ | ||
220 | 85413 | eps->nconv = d->nconv; | |
221 | 85413 | eps->its++; | |
222 |
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,NULL,&k)); |
223 |
5/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
86393 | PetscCall(EPSMonitor(eps,eps->its,eps->nconv+d->npreconv,eps->eigr,eps->eigi,eps->errest,PetscMin(k,eps->nev))); |
224 | } | ||
225 | |||
226 | /* Call the ending routines */ | ||
227 |
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(EPSDavidsonFLCall(d->endList,d)); |
228 |
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); |
229 | } | ||
230 | |||
231 | 1694 | PetscErrorCode EPSReset_XD(EPS eps) | |
232 | { | ||
233 | 1694 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
234 | 1694 | dvdDashboard *dvd = &data->ddb; | |
235 | |||
236 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1694 | PetscFunctionBegin; |
237 | /* Call step destructors and destroys the list */ | ||
238 |
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.
|
1694 | PetscCall(EPSDavidsonFLCall(dvd->destroyList,dvd)); |
239 |
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.
|
1694 | PetscCall(EPSDavidsonFLDestroy(&dvd->destroyList)); |
240 |
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.
|
1694 | PetscCall(EPSDavidsonFLDestroy(&dvd->startList)); |
241 |
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.
|
1694 | PetscCall(EPSDavidsonFLDestroy(&dvd->endList)); |
242 |
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.
|
334 | PetscFunctionReturn(PETSC_SUCCESS); |
243 | } | ||
244 | |||
245 | 40 | PetscErrorCode EPSXDSetKrylovStart_XD(EPS eps,PetscBool krylovstart) | |
246 | { | ||
247 | 40 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
248 | |||
249 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
40 | PetscFunctionBegin; |
250 | 40 | data->krylovstart = krylovstart; | |
251 |
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.
|
40 | PetscFunctionReturn(PETSC_SUCCESS); |
252 | } | ||
253 | |||
254 | 614 | PetscErrorCode EPSXDGetKrylovStart_XD(EPS eps,PetscBool *krylovstart) | |
255 | { | ||
256 | 614 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
257 | |||
258 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
614 | PetscFunctionBegin; |
259 | 614 | *krylovstart = data->krylovstart; | |
260 |
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.
|
614 | PetscFunctionReturn(PETSC_SUCCESS); |
261 | } | ||
262 | |||
263 | 30 | PetscErrorCode EPSXDSetBlockSize_XD(EPS eps,PetscInt blocksize) | |
264 | { | ||
265 | 30 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
266 | |||
267 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
268 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
30 | if (blocksize == PETSC_DEFAULT || blocksize == PETSC_DECIDE) blocksize = 1; |
269 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
30 | PetscCheck(blocksize>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid blocksize value, must be >0"); |
270 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (data->blocksize != blocksize) { |
271 | 30 | data->blocksize = blocksize; | |
272 | 30 | eps->state = EPS_STATE_INITIAL; | |
273 | } | ||
274 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
275 | } | ||
276 | |||
277 | 614 | PetscErrorCode EPSXDGetBlockSize_XD(EPS eps,PetscInt *blocksize) | |
278 | { | ||
279 | 614 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
280 | |||
281 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
614 | PetscFunctionBegin; |
282 | 614 | *blocksize = data->blocksize; | |
283 |
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.
|
614 | PetscFunctionReturn(PETSC_SUCCESS); |
284 | } | ||
285 | |||
286 | 22 | PetscErrorCode EPSXDSetRestart_XD(EPS eps,PetscInt minv,PetscInt plusk) | |
287 | { | ||
288 | 22 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
289 | |||
290 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
22 | PetscFunctionBegin; |
291 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
22 | if (minv == PETSC_DETERMINE) { |
292 | ✗ | if (data->minv != 0) eps->state = EPS_STATE_INITIAL; | |
293 | ✗ | data->minv = 0; | |
294 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
22 | } else if (minv != PETSC_CURRENT) { |
295 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
22 | PetscCheck(minv>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid minv value, must be >0"); |
296 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
22 | if (data->minv != minv) eps->state = EPS_STATE_INITIAL; |
297 | 22 | data->minv = minv; | |
298 | } | ||
299 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 6 times.
|
22 | if (plusk == PETSC_DETERMINE) { |
300 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (data->plusk != PETSC_DETERMINE) eps->state = EPS_STATE_INITIAL; |
301 | 10 | data->plusk = PETSC_DETERMINE; | |
302 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
12 | } else if (plusk != PETSC_CURRENT) { |
303 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
12 | PetscCheck(plusk>=0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid plusk value, must be >0"); |
304 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
12 | if (data->plusk != plusk) eps->state = EPS_STATE_INITIAL; |
305 | 12 | data->plusk = plusk; | |
306 | } | ||
307 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
308 | } | ||
309 | |||
310 | 614 | PetscErrorCode EPSXDGetRestart_XD(EPS eps,PetscInt *minv,PetscInt *plusk) | |
311 | { | ||
312 | 614 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
313 | |||
314 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
614 | PetscFunctionBegin; |
315 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
614 | if (minv) *minv = data->minv; |
316 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
614 | if (plusk) *plusk = data->plusk; |
317 |
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.
|
614 | PetscFunctionReturn(PETSC_SUCCESS); |
318 | } | ||
319 | |||
320 | 604 | PetscErrorCode EPSXDGetInitialSize_XD(EPS eps,PetscInt *initialsize) | |
321 | { | ||
322 | 604 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
323 | |||
324 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
604 | PetscFunctionBegin; |
325 | 604 | *initialsize = data->initialsize; | |
326 |
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.
|
604 | PetscFunctionReturn(PETSC_SUCCESS); |
327 | } | ||
328 | |||
329 | 20 | PetscErrorCode EPSXDSetInitialSize_XD(EPS eps,PetscInt initialsize) | |
330 | { | ||
331 | 20 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
332 | |||
333 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
334 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (initialsize == PETSC_DEFAULT || initialsize == PETSC_DECIDE) initialsize = 0; |
335 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
20 | else PetscCheck(initialsize>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid initial size value, must be >0"); |
336 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (data->initialsize != initialsize) { |
337 | 20 | data->initialsize = initialsize; | |
338 | 20 | eps->state = EPS_STATE_INITIAL; | |
339 | } | ||
340 |
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.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
341 | } | ||
342 | |||
343 | 20 | PetscErrorCode EPSXDSetBOrth_XD(EPS eps,PetscBool borth) | |
344 | { | ||
345 | 20 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
346 | |||
347 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
348 | 20 | data->ipB = borth; | |
349 |
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.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
350 | } | ||
351 | |||
352 | 614 | PetscErrorCode EPSXDGetBOrth_XD(EPS eps,PetscBool *borth) | |
353 | { | ||
354 | 614 | EPS_DAVIDSON *data = (EPS_DAVIDSON*)eps->data; | |
355 | |||
356 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
614 | PetscFunctionBegin; |
357 | 614 | *borth = data->ipB; | |
358 |
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.
|
614 | PetscFunctionReturn(PETSC_SUCCESS); |
359 | } | ||
360 | |||
361 | /* | ||
362 | EPSComputeVectors_XD - Compute eigenvectors from the vectors | ||
363 | provided by the eigensolver. This version is intended for solvers | ||
364 | that provide Schur vectors from the QZ decomposition. Given the partial | ||
365 | Schur decomposition OP*V=V*T, the following steps are performed: | ||
366 | 1) compute eigenvectors of (S,T): S*Z=T*Z*D | ||
367 | 2) compute eigenvectors of OP: X=V*Z | ||
368 | */ | ||
369 | 940 | PetscErrorCode EPSComputeVectors_XD(EPS eps) | |
370 | { | ||
371 | 940 | Mat X; | |
372 | 940 | PetscBool symm; | |
373 | |||
374 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
940 | PetscFunctionBegin; |
375 |
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.
|
940 | PetscCall(PetscObjectTypeCompare((PetscObject)eps->ds,DSHEP,&symm)); |
376 |
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.
|
940 | if (symm) PetscFunctionReturn(PETSC_SUCCESS); |
377 |
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.
|
248 | PetscCall(DSVectors(eps->ds,DS_MAT_X,NULL,NULL)); |
378 | |||
379 | /* V <- V * X */ | ||
380 |
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.
|
248 | PetscCall(DSGetMat(eps->ds,DS_MAT_X,&X)); |
381 |
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.
|
248 | PetscCall(BVSetActiveColumns(eps->V,0,eps->nconv)); |
382 |
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.
|
248 | PetscCall(BVMultInPlace(eps->V,X,0,eps->nconv)); |
383 |
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.
|
248 | PetscCall(DSRestoreMat(eps->ds,DS_MAT_X,&X)); |
384 |
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.
|
52 | PetscFunctionReturn(PETSC_SUCCESS); |
385 | } | ||
386 |