GCC Code Coverage Report


Directory: ./
File: src/pep/interface/pepbasic.c
Date: 2026-06-15 03:58:11
Exec Total Coverage
Lines: 256 274 93.4%
Functions: 18 20 90.0%
Branches: 636 1564 40.7%

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 Basic PEP routines
12 */
13
14 #include <slepc/private/pepimpl.h> /*I "slepcpep.h" I*/
15
16 /* Logging support */
17 PetscClassId PEP_CLASSID = 0;
18 PetscLogEvent PEP_SetUp = 0,PEP_Solve = 0,PEP_Refine = 0,PEP_CISS_SVD = 0;
19
20 /* List of registered PEP routines */
21 PetscFunctionList PEPList = NULL;
22 PetscBool PEPRegisterAllCalled = PETSC_FALSE;
23
24 /* List of registered PEP monitors */
25 PetscFunctionList PEPMonitorList = NULL;
26 PetscFunctionList PEPMonitorCreateList = NULL;
27 PetscFunctionList PEPMonitorDestroyList = NULL;
28 PetscBool PEPMonitorRegisterAllCalled = PETSC_FALSE;
29
30 /*@
31 PEPCreate - Creates the `PEP` context.
32
33 Collective
34
35 Input Parameter:
36 . comm - MPI communicator
37
38 Output Parameter:
39 . outpep - location to put the `PEP` context
40
41 Note:
42 The default `PEP` type is `PEPTOAR`.
43
44 Level: beginner
45
46 .seealso: [](ch:pep), `PEPSetUp()`, `PEPSolve()`, `PEPDestroy()`, `PEP`
47 @*/
48 2015 PetscErrorCode PEPCreate(MPI_Comm comm,PEP *outpep)
49 {
50 2015 PEP pep;
51
52
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2015 PetscFunctionBegin;
53
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2015 PetscAssertPointer(outpep,2);
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.
2015 PetscCall(PEPInitializePackage());
55
7/12
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
2015 PetscCall(SlepcHeaderCreate(pep,PEP_CLASSID,"PEP","Polynomial Eigenvalue Problem","PEP",comm,PEPDestroy,PEPView));
56
57 2015 pep->max_it = PETSC_DETERMINE;
58 2015 pep->nev = 1;
59 2015 pep->ncv = PETSC_DETERMINE;
60 2015 pep->mpd = PETSC_DETERMINE;
61 2015 pep->nini = 0;
62 2015 pep->target = 0.0;
63 2015 pep->tol = PETSC_DETERMINE;
64 2015 pep->conv = PEP_CONV_REL;
65 2015 pep->stop = PEP_STOP_BASIC;
66 2015 pep->which = (PEPWhich)0;
67 2015 pep->basis = PEP_BASIS_MONOMIAL;
68 2015 pep->problem_type = (PEPProblemType)0;
69 2015 pep->scale = PEP_SCALE_NONE;
70 2015 pep->sfactor = 1.0;
71 2015 pep->dsfactor = 1.0;
72 2015 pep->sits = 5;
73 2015 pep->slambda = 1.0;
74 2015 pep->refine = PEP_REFINE_NONE;
75 2015 pep->npart = 1;
76 2015 pep->rtol = PETSC_DETERMINE;
77 2015 pep->rits = PETSC_DETERMINE;
78 2015 pep->scheme = (PEPRefineScheme)0;
79 2015 pep->extract = (PEPExtract)0;
80 2015 pep->trackall = PETSC_FALSE;
81
82 2015 pep->converged = PEPConvergedRelative;
83 2015 pep->convergeduser = NULL;
84 2015 pep->convergeddestroy= NULL;
85 2015 pep->stopping = PEPStoppingBasic;
86 2015 pep->stoppinguser = NULL;
87 2015 pep->stoppingdestroy = NULL;
88 2015 pep->convergedctx = NULL;
89 2015 pep->stoppingctx = NULL;
90 2015 pep->numbermonitors = 0;
91
92 2015 pep->st = NULL;
93 2015 pep->ds = NULL;
94 2015 pep->V = NULL;
95 2015 pep->rg = NULL;
96 2015 pep->A = NULL;
97 2015 pep->nmat = 0;
98 2015 pep->Dl = NULL;
99 2015 pep->Dr = NULL;
100 2015 pep->IS = NULL;
101 2015 pep->eigr = NULL;
102 2015 pep->eigi = NULL;
103 2015 pep->errest = NULL;
104 2015 pep->perm = NULL;
105 2015 pep->pbc = NULL;
106 2015 pep->solvematcoeffs = NULL;
107 2015 pep->nwork = 0;
108 2015 pep->work = NULL;
109 2015 pep->refineksp = NULL;
110 2015 pep->refinesubc = NULL;
111 2015 pep->data = NULL;
112
113 2015 pep->state = PEP_STATE_INITIAL;
114 2015 pep->nconv = 0;
115 2015 pep->its = 0;
116 2015 pep->n = 0;
117 2015 pep->nloc = 0;
118 2015 pep->nrma = NULL;
119 2015 pep->sfactor_set = PETSC_FALSE;
120 2015 pep->lineariz = PETSC_FALSE;
121 2015 pep->reason = PEP_CONVERGED_ITERATING;
122
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.
2015 PetscCall(PetscNew(&pep->sc));
124 2015 *outpep = pep;
125
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.
2015 PetscFunctionReturn(PETSC_SUCCESS);
126 }
127
128 /*@
129 PEPSetType - Selects the particular solver to be used in the `PEP` object.
130
131 Logically Collective
132
133 Input Parameters:
134 + pep - the polynomial eigensolver context
135 - type - a known method
136
137 Options Database Key:
138 . -pep_type type - sets the method; use `-help` for a list of available methods
139
140 Notes:
141 See `PEPType` for available methods. The default is `PEPTOAR`.
142
143 Normally, it is best to use the `PEPSetFromOptions()` command and
144 then set the `PEP` type from the options database rather than by using
145 this routine. Using the options database provides the user with
146 maximum flexibility in evaluating the different available methods.
147 The `PEPSetType()` routine is provided for those situations where it
148 is necessary to set the iterative solver independently of the command
149 line or options database.
150
151 Level: intermediate
152
153 .seealso: [](ch:pep), `PEPType`
154 @*/
155 1924 PetscErrorCode PEPSetType(PEP pep,PEPType type)
156 {
157 1924 PetscErrorCode (*r)(PEP);
158 1924 PetscBool match;
159
160
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1924 PetscFunctionBegin;
161
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
1924 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
162
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1924 PetscAssertPointer(type,2);
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.
1924 PetscCall(PetscObjectTypeCompare((PetscObject)pep,type,&match));
165
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.
1924 if (match) PetscFunctionReturn(PETSC_SUCCESS);
166
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.
1924 PetscCall(PetscFunctionListFind(PEPList,type,&r));
168
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1924 PetscCheck(r,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown PEP type given: %s",type);
169
170
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.
1924 PetscTryTypeMethod(pep,destroy);
171
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1924 PetscCall(PetscMemzero(pep->ops,sizeof(struct _PEPOps)));
172
173 1924 pep->state = PEP_STATE_INITIAL;
174
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1924 PetscCall(PetscObjectChangeTypeName((PetscObject)pep,type));
175
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1924 PetscCall((*r)(pep));
176
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.
374 PetscFunctionReturn(PETSC_SUCCESS);
177 }
178
179 /*@
180 PEPGetType - Gets the `PEP` type as a string from the `PEP` object.
181
182 Not Collective
183
184 Input Parameter:
185 . pep - the polynomial eigensolver context
186
187 Output Parameter:
188 . type - name of `PEP` method
189
190 Note:
191 `type` should not be retained for later use as it will be an invalid pointer
192 if the `PEPType` of `pep` is changed.
193
194 Level: intermediate
195
196 .seealso: [](ch:pep), `PEPSetType()`, `PetscObjectTypeCompare()`, `PetscObjectTypeCompareAny()`
197 @*/
198 86 PetscErrorCode PEPGetType(PEP pep,PEPType *type)
199 {
200
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
86 PetscFunctionBegin;
201
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
86 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
202
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
86 PetscAssertPointer(type,2);
203 86 *type = ((PetscObject)pep)->type_name;
204
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.
86 PetscFunctionReturn(PETSC_SUCCESS);
205 }
206
207 /*@C
208 PEPRegister - Adds a method to the polynomial eigenproblem solver package.
209
210 Not Collective
211
212 Input Parameters:
213 + name - name of a new user-defined solver
214 - function - routine to create the solver context
215
216 Note:
217 `PEPRegister()` may be called multiple times to add several user-defined solvers.
218
219 Example Usage:
220 .vb
221 PEPRegister("my_solver",MySolverCreate);
222 .ve
223
224 Then, your solver can be chosen with the procedural interface via
225 .vb
226 PEPSetType(pep,"my_solver")
227 .ve
228 or at runtime via the option `-pep_type my_solver`.
229
230 Level: advanced
231
232 .seealso: [](ch:pep), `PEPRegisterAll()`
233 @*/
234 10569 PetscErrorCode PEPRegister(const char *name,PetscErrorCode (*function)(PEP))
235 {
236
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10569 PetscFunctionBegin;
237
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10569 PetscCall(PEPInitializePackage());
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.
10569 PetscCall(PetscFunctionListAdd(&PEPList,name,function));
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.
2032 PetscFunctionReturn(PETSC_SUCCESS);
240 }
241
242 /*@C
243 PEPMonitorRegister - Registers a `PEP` monitor routine that may be accessed with
244 `PEPMonitorSetFromOptions()`.
245
246 Not Collective
247
248 Input Parameters:
249 + name - name of a new monitor routine
250 . vtype - a `PetscViewerType` for the output
251 . format - a `PetscViewerFormat` for the output
252 . monitor - monitor routine, see `PEPMonitorRegisterFn`
253 . create - creation routine, or `NULL`
254 - destroy - destruction routine, or `NULL`
255
256 Notes:
257 `PEPMonitorRegister()` may be called multiple times to add several user-defined monitors.
258
259 The calling sequence for the given function matches the calling sequence of `PEPMonitorFn`
260 functions passed to `PEPMonitorSet()` with the additional requirement that its final argument
261 be a `PetscViewerAndFormat`.
262
263 Example Usage:
264 .vb
265 PEPMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL);
266 .ve
267
268 Then, your monitor can be chosen with the procedural interface via
269 .vb
270 PEPMonitorSetFromOptions(pep,"-pep_monitor_my_monitor","my_monitor",NULL);
271 .ve
272 or at runtime via the option `-pep_monitor_my_monitor`.
273
274 Level: advanced
275
276 .seealso: [](ch:pep), `PEPMonitorSet()`, `PEPMonitorRegisterAll()`, `PEPMonitorSetFromOptions()`
277 @*/
278 11490 PetscErrorCode PEPMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,PEPMonitorRegisterFn *monitor,PEPMonitorRegisterCreateFn *create,PEPMonitorRegisterDestroyFn *destroy)
279 {
280 11490 char key[PETSC_MAX_PATH_LEN];
281
282
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11490 PetscFunctionBegin;
283
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11490 PetscCall(PEPInitializePackage());
284
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11490 PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
285
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11490 PetscCall(PetscFunctionListAdd(&PEPMonitorList,key,monitor));
286
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.
11490 if (create) PetscCall(PetscFunctionListAdd(&PEPMonitorCreateList,key,create));
287
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.
11490 if (destroy) PetscCall(PetscFunctionListAdd(&PEPMonitorDestroyList,key,destroy));
288
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.
2208 PetscFunctionReturn(PETSC_SUCCESS);
289 }
290
291 /*@
292 PEPReset - Resets the `PEP` context to the initial state (prior to setup)
293 and destroys any allocated `Vec`s and `Mat`s.
294
295 Collective
296
297 Input Parameter:
298 . pep - the polynomial eigensolver context
299
300 Level: advanced
301
302 .seealso: [](ch:pep), `PEPDestroy()`
303 @*/
304 2309 PetscErrorCode PEPReset(PEP pep)
305 {
306
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2309 PetscFunctionBegin;
307
3/14
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
2309 if (pep) PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
308
1/12
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ 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.
1877 if (!pep) PetscFunctionReturn(PETSC_SUCCESS);
309
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.
2309 PetscTryTypeMethod(pep,reset);
310
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 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.
2309 if (pep->st) PetscCall(STReset(pep->st));
311
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.
2309 if (pep->refineksp) PetscCall(KSPReset(pep->refineksp));
312
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2309 if (pep->nmat) {
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.
1980 PetscCall(MatDestroyMatrices(pep->nmat,&pep->A));
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.
1980 PetscCall(PetscFree2(pep->pbc,pep->nrma));
315
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.
1980 PetscCall(PetscFree(pep->solvematcoeffs));
316 1980 pep->nmat = 0;
317 }
318
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2309 PetscCall(VecDestroy(&pep->Dl));
319
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2309 PetscCall(VecDestroy(&pep->Dr));
320
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2309 PetscCall(BVDestroy(&pep->V));
321
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2309 PetscCall(VecDestroyVecs(pep->nwork,&pep->work));
322 2309 pep->nwork = 0;
323 2309 pep->state = PEP_STATE_INITIAL;
324
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.
2309 PetscFunctionReturn(PETSC_SUCCESS);
325 }
326
327 /*@
328 PEPDestroy - Destroys the `PEP` context.
329
330 Collective
331
332 Input Parameter:
333 . pep - the polynomial eigensolver context
334
335 Level: beginner
336
337 .seealso: [](ch:pep), `PEPCreate()`, `PEPSetUp()`, `PEPSolve()`
338 @*/
339 2084 PetscErrorCode PEPDestroy(PEP *pep)
340 {
341
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2084 PetscFunctionBegin;
342
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.
2084 if (!*pep) PetscFunctionReturn(PETSC_SUCCESS);
343
2/12
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
2060 PetscValidHeaderSpecific(*pep,PEP_CLASSID,1);
344
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.
2060 if (--((PetscObject)*pep)->refct > 0) { *pep = NULL; PetscFunctionReturn(PETSC_SUCCESS); }
345
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2015 PetscCall(PEPReset(*pep));
346
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 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.
2015 PetscTryTypeMethod(*pep,destroy);
347
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 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.
2015 if ((*pep)->eigr) PetscCall(PetscFree4((*pep)->eigr,(*pep)->eigi,(*pep)->errest,(*pep)->perm));
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.
2015 PetscCall(STDestroy(&(*pep)->st));
349
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2015 PetscCall(RGDestroy(&(*pep)->rg));
350
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2015 PetscCall(DSDestroy(&(*pep)->ds));
351
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2015 PetscCall(KSPDestroy(&(*pep)->refineksp));
352
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2015 PetscCall(PetscSubcommDestroy(&(*pep)->refinesubc));
353
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.
2015 PetscCall(PetscFree((*pep)->sc));
354 /* just in case the initial vectors have not been used */
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.
2015 PetscCall(SlepcBasisDestroy_Private(&(*pep)->nini,&(*pep)->IS));
356
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.
2015 if ((*pep)->convergeddestroy) PetscCall((*(*pep)->convergeddestroy)(&(*pep)->convergedctx));
357
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.
2015 if ((*pep)->stoppingdestroy) PetscCall((*(*pep)->stoppingdestroy)(&(*pep)->stoppingctx));
358
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2015 PetscCall(PEPMonitorCancel(*pep));
359
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2015 PetscCall(PetscHeaderDestroy(pep));
360
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.
374 PetscFunctionReturn(PETSC_SUCCESS);
361 }
362
363 /*@
364 PEPSetBV - Associates a basis vectors object to the polynomial eigensolver.
365
366 Collective
367
368 Input Parameters:
369 + pep - the polynomial eigensolver context
370 - bv - the basis vectors object
371
372 Note:
373 Use `PEPGetBV()` to retrieve the basis vectors context (for example,
374 to free it at the end of the computations).
375
376 Level: advanced
377
378 .seealso: [](ch:pep), `PEPGetBV()`
379 @*/
380 PetscErrorCode PEPSetBV(PEP pep,BV bv)
381 {
382 PetscFunctionBegin;
383 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
384 PetscValidHeaderSpecific(bv,BV_CLASSID,2);
385 PetscCheckSameComm(pep,1,bv,2);
386 PetscCall(PetscObjectReference((PetscObject)bv));
387 PetscCall(BVDestroy(&pep->V));
388 pep->V = bv;
389 PetscFunctionReturn(PETSC_SUCCESS);
390 }
391
392 /*@
393 PEPGetBV - Obtain the basis vectors object associated to the polynomial
394 eigensolver object.
395
396 Not Collective
397
398 Input Parameter:
399 . pep - the polynomial eigensolver context
400
401 Output Parameter:
402 . bv - basis vectors context
403
404 Level: advanced
405
406 .seealso: [](ch:pep), `PEPSetBV()`
407 @*/
408 2014 PetscErrorCode PEPGetBV(PEP pep,BV *bv)
409 {
410
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2014 PetscFunctionBegin;
411
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
2014 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
412
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2014 PetscAssertPointer(bv,2);
413
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2014 if (!pep->V) {
414
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1994 PetscCall(BVCreate(PetscObjectComm((PetscObject)pep),&pep->V));
415
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1994 PetscCall(PetscObjectIncrementTabLevel((PetscObject)pep->V,(PetscObject)pep,0));
416
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1994 PetscCall(PetscObjectSetOptions((PetscObject)pep->V,((PetscObject)pep)->options));
417 }
418 2014 *bv = pep->V;
419
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.
2014 PetscFunctionReturn(PETSC_SUCCESS);
420 }
421
422 /*@
423 PEPSetRG - Associates a region object to the polynomial eigensolver.
424
425 Collective
426
427 Input Parameters:
428 + pep - the polynomial eigensolver context
429 - rg - the region object
430
431 Note:
432 Use `PEPGetRG()` to retrieve the region context (for example,
433 to free it at the end of the computations).
434
435 Level: advanced
436
437 .seealso: [](ch:pep), `PEPGetRG()`
438 @*/
439 30 PetscErrorCode PEPSetRG(PEP pep,RG rg)
440 {
441
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
30 PetscFunctionBegin;
442
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
30 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
443
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
30 if (rg) {
444
2/12
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
30 PetscValidHeaderSpecific(rg,RG_CLASSID,2);
445
13/32
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
30 PetscCheckSameComm(pep,1,rg,2);
446 }
447
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
30 PetscCall(PetscObjectReference((PetscObject)rg));
448
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
30 PetscCall(RGDestroy(&pep->rg));
449 30 pep->rg = rg;
450
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.
30 PetscFunctionReturn(PETSC_SUCCESS);
451 }
452
453 /*@
454 PEPGetRG - Obtain the region object associated to the
455 polynomial eigensolver object.
456
457 Not Collective
458
459 Input Parameter:
460 . pep - the polynomial eigensolver context
461
462 Output Parameter:
463 . rg - region context
464
465 Level: advanced
466
467 .seealso: [](ch:pep), `PEPSetRG()`
468 @*/
469 2188 PetscErrorCode PEPGetRG(PEP pep,RG *rg)
470 {
471
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2188 PetscFunctionBegin;
472
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
2188 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
473
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2188 PetscAssertPointer(rg,2);
474
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2188 if (!pep->rg) {
475
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1894 PetscCall(RGCreate(PetscObjectComm((PetscObject)pep),&pep->rg));
476
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1894 PetscCall(PetscObjectIncrementTabLevel((PetscObject)pep->rg,(PetscObject)pep,0));
477
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1894 PetscCall(PetscObjectSetOptions((PetscObject)pep->rg,((PetscObject)pep)->options));
478 }
479 2188 *rg = pep->rg;
480
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.
2188 PetscFunctionReturn(PETSC_SUCCESS);
481 }
482
483 /*@
484 PEPSetDS - Associates a direct solver object to the polynomial eigensolver.
485
486 Collective
487
488 Input Parameters:
489 + pep - the polynomial eigensolver context
490 - ds - the direct solver object
491
492 Note:
493 Use `PEPGetDS()` to retrieve the direct solver context (for example,
494 to free it at the end of the computations).
495
496 Level: advanced
497
498 .seealso: [](ch:pep), `PEPGetDS()`
499 @*/
500 PetscErrorCode PEPSetDS(PEP pep,DS ds)
501 {
502 PetscFunctionBegin;
503 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
504 PetscValidHeaderSpecific(ds,DS_CLASSID,2);
505 PetscCheckSameComm(pep,1,ds,2);
506 PetscCall(PetscObjectReference((PetscObject)ds));
507 PetscCall(DSDestroy(&pep->ds));
508 pep->ds = ds;
509 PetscFunctionReturn(PETSC_SUCCESS);
510 }
511
512 /*@
513 PEPGetDS - Obtain the direct solver object associated to the
514 polynomial eigensolver object.
515
516 Not Collective
517
518 Input Parameter:
519 . pep - the polynomial eigensolver context
520
521 Output Parameter:
522 . ds - direct solver context
523
524 Level: advanced
525
526 .seealso: [](ch:pep), `PEPSetDS()`
527 @*/
528 1924 PetscErrorCode PEPGetDS(PEP pep,DS *ds)
529 {
530
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1924 PetscFunctionBegin;
531
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
1924 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
532
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1924 PetscAssertPointer(ds,2);
533
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
1924 if (!pep->ds) {
534
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1924 PetscCall(DSCreate(PetscObjectComm((PetscObject)pep),&pep->ds));
535
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1924 PetscCall(PetscObjectIncrementTabLevel((PetscObject)pep->ds,(PetscObject)pep,0));
536
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1924 PetscCall(PetscObjectSetOptions((PetscObject)pep->ds,((PetscObject)pep)->options));
537 }
538 1924 *ds = pep->ds;
539
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.
1924 PetscFunctionReturn(PETSC_SUCCESS);
540 }
541
542 /*@
543 PEPSetST - Associates a spectral transformation object to the eigensolver.
544
545 Collective
546
547 Input Parameters:
548 + pep - the polynomial eigensolver context
549 - st - the spectral transformation object
550
551 Note:
552 Use `PEPGetST()` to retrieve the spectral transformation context (for example,
553 to free it at the end of the computations).
554
555 Level: advanced
556
557 .seealso: [](ch:pep), `PEPGetST()`
558 @*/
559 10 PetscErrorCode PEPSetST(PEP pep,ST st)
560 {
561
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10 PetscFunctionBegin;
562
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
10 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
563
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
10 PetscValidHeaderSpecific(st,ST_CLASSID,2);
564
13/32
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
10 PetscCheckSameComm(pep,1,st,2);
565
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscObjectReference((PetscObject)st));
566
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(STDestroy(&pep->st));
567 10 pep->st = st;
568
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.
10 PetscFunctionReturn(PETSC_SUCCESS);
569 }
570
571 /*@
572 PEPGetST - Obtain the spectral transformation (`ST`) object associated
573 to the eigensolver object.
574
575 Not Collective
576
577 Input Parameter:
578 . pep - the polynomial eigensolver context
579
580 Output Parameter:
581 . st - spectral transformation context
582
583 Level: intermediate
584
585 .seealso: [](ch:pep), `PEPSetST()`
586 @*/
587 308682 PetscErrorCode PEPGetST(PEP pep,ST *st)
588 {
589
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
308682 PetscFunctionBegin;
590
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
308682 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
591
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
308682 PetscAssertPointer(st,2);
592
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
308682 if (!pep->st) {
593
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1914 PetscCall(STCreate(PetscObjectComm((PetscObject)pep),&pep->st));
594
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1914 PetscCall(PetscObjectIncrementTabLevel((PetscObject)pep->st,(PetscObject)pep,0));
595
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1914 PetscCall(PetscObjectSetOptions((PetscObject)pep->st,((PetscObject)pep)->options));
596 }
597 308682 *st = pep->st;
598
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.
308682 PetscFunctionReturn(PETSC_SUCCESS);
599 }
600
601 /*@
602 PEPRefineGetKSP - Obtain the `KSP` object used by the eigensolver
603 object in the refinement phase.
604
605 Collective
606
607 Input Parameter:
608 . pep - the polynomial eigensolver context
609
610 Output Parameter:
611 . ksp - the linear solver context
612
613 Level: advanced
614
615 .seealso: [](ch:pep), `PEPSetRefine()`
616 @*/
617 2104 PetscErrorCode PEPRefineGetKSP(PEP pep,KSP *ksp)
618 {
619 2104 MPI_Comm comm;
620
621
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2104 PetscFunctionBegin;
622
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
2104 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
623
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2104 PetscAssertPointer(ksp,2);
624
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2104 if (!pep->refineksp) {
625
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1844 if (pep->npart>1) {
626 /* Split in subcomunicators */
627
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
120 PetscCall(PetscSubcommCreate(PetscObjectComm((PetscObject)pep),&pep->refinesubc));
628
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
120 PetscCall(PetscSubcommSetNumber(pep->refinesubc,pep->npart));
629
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
120 PetscCall(PetscSubcommSetType(pep->refinesubc,PETSC_SUBCOMM_CONTIGUOUS));
630
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
120 PetscCall(PetscSubcommGetChild(pep->refinesubc,&comm));
631
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1724 } else PetscCall(PetscObjectGetComm((PetscObject)pep,&comm));
632
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1844 PetscCall(KSPCreate(comm,&pep->refineksp));
633
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1844 PetscCall(PetscObjectIncrementTabLevel((PetscObject)pep->refineksp,(PetscObject)pep,0));
634
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1844 PetscCall(PetscObjectSetOptions((PetscObject)pep->refineksp,((PetscObject)pep)->options));
635
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1844 PetscCall(KSPSetOptionsPrefix(*ksp,((PetscObject)pep)->prefix));
636
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1844 PetscCall(KSPAppendOptionsPrefix(*ksp,"pep_refine_"));
637
7/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
3672 PetscCall(KSPSetTolerances(pep->refineksp,SlepcDefaultTol(pep->rtol),PETSC_CURRENT,PETSC_CURRENT,PETSC_CURRENT));
638 }
639 2104 *ksp = pep->refineksp;
640
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.
2104 PetscFunctionReturn(PETSC_SUCCESS);
641 }
642
643 /*@
644 PEPSetTarget - Sets the value of the target.
645
646 Logically Collective
647
648 Input Parameters:
649 + pep - the polynomial eigensolver context
650 - target - the value of the target
651
652 Options Database Key:
653 . -pep_target target - the value of the target
654
655 Notes:
656 The target is a scalar value used to determine the portion of the spectrum
657 of interest. It is used in combination with `PEPSetWhichEigenpairs()`.
658
659 When PETSc is built with real scalars, it is not possible to specify a
660 complex target.
661
662 In the case of complex scalars, a complex value can be provided in the
663 command line with `[+/-][realnumber][+/-]realnumberi` with no spaces, e.g.
664 `-pep_target 1.0+2.0i`.
665
666 Level: intermediate
667
668 .seealso: [](ch:pep), `PEPGetTarget()`, `PEPSetWhichEigenpairs()`
669 @*/
670 929 PetscErrorCode PEPSetTarget(PEP pep,PetscScalar target)
671 {
672
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
929 PetscFunctionBegin;
673
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
929 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
674
30/68
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 2 times.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
929 PetscValidLogicalCollectiveScalar(pep,target,2);
675 929 pep->target = target;
676
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.
929 if (!pep->st) PetscCall(PEPGetST(pep,&pep->st));
677
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
929 PetscCall(STSetDefaultShift(pep->st,target));
678
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.
183 PetscFunctionReturn(PETSC_SUCCESS);
679 }
680
681 /*@
682 PEPGetTarget - Gets the value of the target.
683
684 Not Collective
685
686 Input Parameter:
687 . pep - the polynomial eigensolver context
688
689 Output Parameter:
690 . target - the value of the target
691
692 Note:
693 If the target was not set by the user, then zero is returned.
694
695 Level: intermediate
696
697 .seealso: [](ch:pep), `PEPSetTarget()`
698 @*/
699 26 PetscErrorCode PEPGetTarget(PEP pep,PetscScalar* target)
700 {
701
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
26 PetscFunctionBegin;
702
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
26 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
703
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
26 PetscAssertPointer(target,2);
704 26 *target = pep->target;
705
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.
26 PetscFunctionReturn(PETSC_SUCCESS);
706 }
707
708 /*@
709 PEPSetInterval - Defines the computational interval for spectrum slicing.
710
711 Logically Collective
712
713 Input Parameters:
714 + pep - the polynomial eigensolver context
715 . inta - left end of the interval
716 - intb - right end of the interval
717
718 Options Database Key:
719 . -pep_interval a,b - set $[a,b]$ as the interval of interest
720
721 Notes:
722 Spectrum slicing is a technique employed for computing all eigenvalues of
723 symmetric quadratic eigenproblems in a given interval, see section [](#sec:qslice).
724 This function provides the interval to be considered. It must be used in
725 combination with `PEP_ALL`, see `PEPSetWhichEigenpairs()`. Note that in
726 polynomial eigenproblems spectrum slicing is implemented in `PEPSTOAR` only.
727
728 In the command-line option, two values must be provided. For an open interval,
729 one can give an infinite, e.g., `-pep_interval 1.0,inf` or `-pep_interval -inf,1.0`.
730 An open interval in the programmatic interface can be specified with
731 `PETSC_MAX_REAL` and -`PETSC_MAX_REAL`.
732
733 Level: intermediate
734
735 .seealso: [](ch:pep), [](#sec:qslice), `PEPGetInterval()`, `PEPSetWhichEigenpairs()`, `PEPSTOAR`
736 @*/
737 94 PetscErrorCode PEPSetInterval(PEP pep,PetscReal inta,PetscReal intb)
738 {
739
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
94 PetscFunctionBegin;
740
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
94 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
741
29/66
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
94 PetscValidLogicalCollectiveReal(pep,inta,2);
742
29/66
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
94 PetscValidLogicalCollectiveReal(pep,intb,3);
743
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
94 PetscCheck(inta<intb,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_WRONG,"Badly defined interval, must be inta<intb");
744
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
94 if (pep->inta != inta || pep->intb != intb) {
745 94 pep->inta = inta;
746 94 pep->intb = intb;
747 94 pep->state = PEP_STATE_INITIAL;
748 }
749
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.
18 PetscFunctionReturn(PETSC_SUCCESS);
750 }
751
752 /*@
753 PEPGetInterval - Gets the computational interval for spectrum slicing.
754
755 Not Collective
756
757 Input Parameter:
758 . pep - the polynomial eigensolver context
759
760 Output Parameters:
761 + inta - left end of the interval
762 - intb - right end of the interval
763
764 Level: intermediate
765
766 Note:
767 If the interval was not set by the user, then zeros are returned.
768
769 .seealso: [](ch:pep), `PEPSetInterval()`
770 @*/
771 40 PetscErrorCode PEPGetInterval(PEP pep,PetscReal* inta,PetscReal* intb)
772 {
773
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
40 PetscFunctionBegin;
774
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
40 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
775
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
40 if (inta) *inta = pep->inta;
776
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
40 if (intb) *intb = pep->intb;
777
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);
778 }
779