GCC Code Coverage Report


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