GCC Code Coverage Report


Directory: ./
File: src/eps/interface/epsbasic.c
Date: 2026-06-15 03:58:11
Exec Total Coverage
Lines: 255 279 91.4%
Functions: 20 23 87.0%
Branches: 617 1592 38.8%

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 EPS routines
12 */
13
14 #include <slepc/private/epsimpl.h> /*I "slepceps.h" I*/
15
16 /* Logging support */
17 PetscClassId EPS_CLASSID = 0;
18 PetscLogEvent EPS_SetUp = 0,EPS_Solve = 0,EPS_CISS_SVD = 0;
19
20 /* List of registered EPS routines */
21 PetscFunctionList EPSList = NULL;
22 PetscBool EPSRegisterAllCalled = PETSC_FALSE;
23
24 /* List of registered EPS monitors */
25 PetscFunctionList EPSMonitorList = NULL;
26 PetscFunctionList EPSMonitorCreateList = NULL;
27 PetscFunctionList EPSMonitorDestroyList = NULL;
28 PetscBool EPSMonitorRegisterAllCalled = PETSC_FALSE;
29
30 /*@
31 EPSCreate - Creates the `EPS` context.
32
33 Collective
34
35 Input Parameter:
36 . comm - MPI communicator
37
38 Output Parameter:
39 . outeps - location to put the `EPS` context
40
41 Note:
42 The default `EPS` type is `EPSKRYLOVSCHUR`.
43
44 Level: beginner
45
46 .seealso: [](ch:eps), `EPSSetUp()`, `EPSSolve()`, `EPSDestroy()`, `EPS`
47 @*/
48 7462 PetscErrorCode EPSCreate(MPI_Comm comm,EPS *outeps)
49 {
50 7462 EPS eps;
51
52
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7462 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.
7462 PetscAssertPointer(outeps,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.
7462 PetscCall(EPSInitializePackage());
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.
7462 PetscCall(SlepcHeaderCreate(eps,EPS_CLASSID,"EPS","Eigenvalue Problem Solver","EPS",comm,EPSDestroy,EPSView));
56
57 7462 eps->max_it = PETSC_DETERMINE;
58 7462 eps->nev = 0;
59 7462 eps->ncv = PETSC_DETERMINE;
60 7462 eps->mpd = PETSC_DETERMINE;
61 7462 eps->nini = 0;
62 7462 eps->nds = 0;
63 7462 eps->target = 0.0;
64 7462 eps->tol = PETSC_DETERMINE;
65 7462 eps->thres = PETSC_MIN_REAL;
66 7462 eps->threlative = PETSC_FALSE;
67 7462 eps->conv = EPS_CONV_REL;
68 7462 eps->stop = EPS_STOP_BASIC;
69 7462 eps->which = (EPSWhich)0;
70 7462 eps->inta = 0.0;
71 7462 eps->intb = 0.0;
72 7462 eps->problem_type = (EPSProblemType)0;
73 7462 eps->extraction = EPS_RITZ;
74 7462 eps->balance = EPS_BALANCE_NONE;
75 7462 eps->balance_its = 5;
76 7462 eps->balance_cutoff = 1e-8;
77 7462 eps->trueres = PETSC_FALSE;
78 7462 eps->trackall = PETSC_FALSE;
79 7462 eps->purify = PETSC_TRUE;
80 7462 eps->twosided = PETSC_FALSE;
81
82 7462 eps->converged = EPSConvergedRelative;
83 7462 eps->convergeduser = NULL;
84 7462 eps->convergeddestroy= NULL;
85 7462 eps->stopping = EPSStoppingBasic;
86 7462 eps->stoppinguser = NULL;
87 7462 eps->stoppingdestroy = NULL;
88 7462 eps->arbitrary = NULL;
89 7462 eps->arbitrarydestroy= NULL;
90 7462 eps->convergedctx = NULL;
91 7462 eps->stoppingctx = NULL;
92 7462 eps->arbitraryctx = NULL;
93 7462 eps->numbermonitors = 0;
94
95 7462 eps->st = NULL;
96 7462 eps->ds = NULL;
97 7462 eps->V = NULL;
98 7462 eps->W = NULL;
99 7462 eps->rg = NULL;
100 7462 eps->D = NULL;
101 7462 eps->IS = NULL;
102 7462 eps->ISL = NULL;
103 7462 eps->defl = NULL;
104 7462 eps->eigr = NULL;
105 7462 eps->eigi = NULL;
106 7462 eps->errest = NULL;
107 7462 eps->rr = NULL;
108 7462 eps->ri = NULL;
109 7462 eps->perm = NULL;
110 7462 eps->nwork = 0;
111 7462 eps->work = NULL;
112 7462 eps->data = NULL;
113
114 7462 eps->state = EPS_STATE_INITIAL;
115 7462 eps->categ = EPS_CATEGORY_KRYLOV;
116 7462 eps->nconv = 0;
117 7462 eps->its = 0;
118 7462 eps->nloc = 0;
119 7462 eps->nrma = 0.0;
120 7462 eps->nrmb = 0.0;
121 7462 eps->useds = PETSC_FALSE;
122 7462 eps->isgeneralized = PETSC_FALSE;
123 7462 eps->ispositive = PETSC_FALSE;
124 7462 eps->ishermitian = PETSC_FALSE;
125 7462 eps->isstructured = PETSC_FALSE;
126 7462 eps->reason = EPS_CONVERGED_ITERATING;
127
128
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
7462 PetscCall(PetscNew(&eps->sc));
129 7462 *outeps = eps;
130
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.
7462 PetscFunctionReturn(PETSC_SUCCESS);
131 }
132
133 /*@
134 EPSSetType - Selects the particular solver to be used in the `EPS` object.
135
136 Logically Collective
137
138 Input Parameters:
139 + eps - the linear eigensolver context
140 - type - a known method
141
142 Options Database Key:
143 . -eps_type type - sets the method; use `-help` for a list of available methods
144
145 Notes:
146 See `EPSType` for available methods. The default is `EPSKRYLOVSCHUR`.
147
148 Normally, it is best to use the `EPSSetFromOptions()` command and
149 then set the `EPS` type from the options database rather than by using
150 this routine. Using the options database provides the user with
151 maximum flexibility in evaluating the different available methods.
152 The `EPSSetType()` routine is provided for those situations where it
153 is necessary to set the iterative solver independently of the command
154 line or options database.
155
156 Level: intermediate
157
158 .seealso: [](ch:eps), `STSetType()`, `EPSType`
159 @*/
160 7664 PetscErrorCode EPSSetType(EPS eps,EPSType type)
161 {
162 7664 PetscErrorCode (*r)(EPS);
163 7664 PetscBool match;
164
165
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7664 PetscFunctionBegin;
166
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.
7664 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
167
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.
7664 PetscAssertPointer(type,2);
168
169
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.
7664 PetscCall(PetscObjectTypeCompare((PetscObject)eps,type,&match));
170
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.
7664 if (match) PetscFunctionReturn(PETSC_SUCCESS);
171
172
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.
7381 PetscCall(PetscFunctionListFind(EPSList,type,&r));
173
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
7381 PetscCheck(r,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown EPS type given: %s",type);
174
175
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.
7381 PetscTryTypeMethod(eps,destroy);
176
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.
7381 PetscCall(PetscMemzero(eps->ops,sizeof(struct _EPSOps)));
177
178 7381 eps->state = EPS_STATE_INITIAL;
179
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.
7381 PetscCall(PetscObjectChangeTypeName((PetscObject)eps,type));
180
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.
7381 PetscCall((*r)(eps));
181
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.
1430 PetscFunctionReturn(PETSC_SUCCESS);
182 }
183
184 /*@
185 EPSGetType - Gets the `EPS` type as a string from the `EPS` object.
186
187 Not Collective
188
189 Input Parameter:
190 . eps - the linear eigensolver context
191
192 Output Parameter:
193 . type - name of `EPS` method
194
195 Note:
196 `type` should not be retained for later use as it will be an invalid pointer
197 if the `EPSType` of `eps` is changed.
198
199 Level: intermediate
200
201 .seealso: [](ch:eps), `EPSSetType()`, `PetscObjectTypeCompare()`, `PetscObjectTypeCompareAny()`
202 @*/
203 1163 PetscErrorCode EPSGetType(EPS eps,EPSType *type)
204 {
205
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1163 PetscFunctionBegin;
206
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.
1163 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
207
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.
1163 PetscAssertPointer(type,2);
208 1163 *type = ((PetscObject)eps)->type_name;
209
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.
1163 PetscFunctionReturn(PETSC_SUCCESS);
210 }
211
212 /*@C
213 EPSRegister - Adds a method to the eigenproblem solver package.
214
215 Not Collective
216
217 Input Parameters:
218 + name - name of a new user-defined solver
219 - function - routine to create the solver context
220
221 Note:
222 `EPSRegister()` may be called multiple times to add several user-defined solvers.
223
224 Example Usage:
225 .vb
226 EPSRegister("my_solver",MySolverCreate);
227 .ve
228
229 Then, your solver can be chosen with the procedural interface via
230 .vb
231 EPSSetType(eps,"my_solver")
232 .ve
233 or at runtime via the option `-eps_type my_solver`.
234
235 Level: advanced
236
237 .seealso: [](ch:eps), `EPSRegisterAll()`
238 @*/
239 101605 PetscErrorCode EPSRegister(const char *name,PetscErrorCode (*function)(EPS))
240 {
241
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
101605 PetscFunctionBegin;
242
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.
101605 PetscCall(EPSInitializePackage());
243
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.
101605 PetscCall(PetscFunctionListAdd(&EPSList,name,function));
244
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.
20701 PetscFunctionReturn(PETSC_SUCCESS);
245 }
246
247 /*@C
248 EPSMonitorRegister - Registers an `EPS` monitor routine that may be accessed with
249 `EPSMonitorSetFromOptions()`.
250
251 Not Collective
252
253 Input Parameters:
254 + name - name of a new monitor routine
255 . vtype - a `PetscViewerType` for the output
256 . format - a `PetscViewerFormat` for the output
257 . monitor - monitor routine, see `EPSMonitorRegisterFn`
258 . create - creation routine, or `NULL`
259 - destroy - destruction routine, or `NULL`
260
261 Notes:
262 `EPSMonitorRegister()` may be called multiple times to add several user-defined monitors.
263
264 The calling sequence for the given function matches the calling sequence of `EPSMonitorFn`
265 functions passed to `EPSMonitorSet()` with the additional requirement that its final argument
266 be a `PetscViewerAndFormat`.
267
268 Example Usage:
269 .vb
270 EPSMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL);
271 .ve
272
273 Then, your monitor can be chosen with the procedural interface via
274 .vb
275 EPSMonitorSetFromOptions(eps,"-eps_monitor_my_monitor","my_monitor",NULL)
276 .ve
277 or at runtime via the option `-eps_monitor_my_monitor`.
278
279 Level: advanced
280
281 .seealso: [](ch:eps), `EPSMonitorSet()`, `EPSMonitorRegisterAll()`, `EPSMonitorSetFromOptions()`
282 @*/
283 41088 PetscErrorCode EPSMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,EPSMonitorRegisterFn *monitor,EPSMonitorRegisterCreateFn *create,EPSMonitorRegisterDestroyFn *destroy)
284 {
285 41088 char key[PETSC_MAX_PATH_LEN];
286
287
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
41088 PetscFunctionBegin;
288
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.
41088 PetscCall(EPSInitializePackage());
289
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.
41088 PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
290
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
41088 PetscCall(PetscFunctionListAdd(&EPSMonitorList,key,monitor));
291
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.
41088 if (create) PetscCall(PetscFunctionListAdd(&EPSMonitorCreateList,key,create));
292
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.
41088 if (destroy) PetscCall(PetscFunctionListAdd(&EPSMonitorDestroyList,key,destroy));
293
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.
7998 PetscFunctionReturn(PETSC_SUCCESS);
294 }
295
296 /*@
297 EPSReset - Resets the `EPS` context to the initial state (prior to setup)
298 and destroys any allocated `Vec`s and `Mat`s.
299
300 Collective
301
302 Input Parameter:
303 . eps - the linear eigensolver context
304
305 Note:
306 This can be used when a problem of different matrix size wants to be solved.
307 All options that have previously been set are preserved, so in a next use
308 the solver configuration is the same, but new sizes for matrices and vectors
309 are allowed.
310
311 Level: advanced
312
313 .seealso: [](ch:eps), `EPSDestroy()`
314 @*/
315 9296 PetscErrorCode EPSReset(EPS eps)
316 {
317
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
9296 PetscFunctionBegin;
318
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.
9296 if (eps) PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
319
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.
7517 if (!eps) PetscFunctionReturn(PETSC_SUCCESS);
320
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.
9296 PetscTryTypeMethod(eps,reset);
321
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.
9296 if (eps->st) PetscCall(STReset(eps->st));
322
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.
9296 PetscCall(VecDestroy(&eps->D));
323
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.
9296 PetscCall(BVDestroy(&eps->V));
324
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.
9296 PetscCall(BVDestroy(&eps->W));
325
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.
9296 PetscCall(VecDestroyVecs(eps->nwork,&eps->work));
326 9296 eps->nwork = 0;
327 9296 eps->state = EPS_STATE_INITIAL;
328
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.
9296 PetscFunctionReturn(PETSC_SUCCESS);
329 }
330
331 /*@
332 EPSDestroy - Destroys the `EPS` context.
333
334 Collective
335
336 Input Parameter:
337 . eps - the linear eigensolver context
338
339 Level: beginner
340
341 .seealso: [](ch:eps), `EPSCreate()`, `EPSSetUp()`, `EPSSolve()`
342 @*/
343 8286 PetscErrorCode EPSDestroy(EPS *eps)
344 {
345
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8286 PetscFunctionBegin;
346
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.
8286 if (!*eps) PetscFunctionReturn(PETSC_SUCCESS);
347
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.
7881 PetscValidHeaderSpecific(*eps,EPS_CLASSID,1);
348
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.
7881 if (--((PetscObject)*eps)->refct > 0) { *eps = NULL; PetscFunctionReturn(PETSC_SUCCESS); }
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.
7462 PetscCall(EPSReset(*eps));
350
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.
7462 PetscTryTypeMethod(*eps,destroy);
351
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.
7462 if ((*eps)->eigr) PetscCall(PetscFree4((*eps)->eigr,(*eps)->eigi,(*eps)->errest,(*eps)->perm));
352
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.
7462 if ((*eps)->rr) PetscCall(PetscFree2((*eps)->rr,(*eps)->ri));
353
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.
7462 PetscCall(STDestroy(&(*eps)->st));
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.
7462 PetscCall(RGDestroy(&(*eps)->rg));
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.
7462 PetscCall(DSDestroy(&(*eps)->ds));
356
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.
7462 PetscCall(PetscFree((*eps)->sc));
357 /* just in case the initial vectors have not been used */
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.
7462 PetscCall(SlepcBasisDestroy_Private(&(*eps)->nds,&(*eps)->defl));
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.
7462 PetscCall(SlepcBasisDestroy_Private(&(*eps)->nini,&(*eps)->IS));
360
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.
7462 PetscCall(SlepcBasisDestroy_Private(&(*eps)->ninil,&(*eps)->ISL));
361
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.
7462 if ((*eps)->convergeddestroy) PetscCall((*(*eps)->convergeddestroy)(&(*eps)->convergedctx));
362
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.
7462 if ((*eps)->stoppingdestroy) PetscCall((*(*eps)->stoppingdestroy)(&(*eps)->stoppingctx));
363
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.
7462 if ((*eps)->arbitrarydestroy) PetscCall((*(*eps)->arbitrarydestroy)(&(*eps)->arbitraryctx));
364
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.
7462 PetscCall(EPSMonitorCancel(*eps));
365
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.
7462 PetscCall(PetscHeaderDestroy(eps));
366
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.
1428 PetscFunctionReturn(PETSC_SUCCESS);
367 }
368
369 /*@
370 EPSSetTarget - Sets the value of the target.
371
372 Logically Collective
373
374 Input Parameters:
375 + eps - the linear eigensolver context
376 - target - the value of the target
377
378 Options Database Key:
379 . -eps_target target - the value of the target
380
381 Notes:
382 The target is a scalar value used to determine the portion of the spectrum
383 of interest. It is used in combination with `EPSSetWhichEigenpairs()`.
384
385 When PETSc is built with real scalars, it is not possible to specify a
386 complex target.
387
388 In the case of complex scalars, a complex value can be provided in the
389 command line with `[+/-][realnumber][+/-]realnumberi` with no spaces, e.g.
390 `-eps_target 1.0+2.0i`.
391
392 Level: intermediate
393
394 .seealso: [](ch:eps), `EPSGetTarget()`, `EPSSetWhichEigenpairs()`
395 @*/
396 1749 PetscErrorCode EPSSetTarget(EPS eps,PetscScalar target)
397 {
398
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1749 PetscFunctionBegin;
399
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.
1749 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
400
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.
1749 PetscValidLogicalCollectiveScalar(eps,target,2);
401 1749 eps->target = target;
402
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.
1749 if (!eps->st) PetscCall(EPSGetST(eps,&eps->st));
403
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.
1749 PetscCall(STSetDefaultShift(eps->st,target));
404
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.
356 PetscFunctionReturn(PETSC_SUCCESS);
405 }
406
407 /*@
408 EPSGetTarget - Gets the value of the target.
409
410 Not Collective
411
412 Input Parameter:
413 . eps - the linear eigensolver context
414
415 Output Parameter:
416 . target - the value of the target
417
418 Note:
419 If the target was not set by the user, then zero is returned.
420
421 Level: intermediate
422
423 .seealso: [](ch:eps), `EPSSetTarget()`
424 @*/
425 13734 PetscErrorCode EPSGetTarget(EPS eps,PetscScalar* target)
426 {
427
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13734 PetscFunctionBegin;
428
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.
13734 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
429
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.
13734 PetscAssertPointer(target,2);
430 13734 *target = eps->target;
431
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.
13734 PetscFunctionReturn(PETSC_SUCCESS);
432 }
433
434 /*@
435 EPSSetInterval - Defines the computational interval for spectrum slicing.
436
437 Logically Collective
438
439 Input Parameters:
440 + eps - the linear eigensolver context
441 . inta - left end of the interval
442 - intb - right end of the interval
443
444 Options Database Key:
445 . -eps_interval a,b - set $[a,b]$ as the interval of interest
446
447 Notes:
448 Spectrum slicing is a technique employed for computing all eigenvalues of
449 symmetric eigenproblems in a given interval, see section [](#sec:slice).
450 This function provides the interval to be considered. It must be used in
451 combination with `EPS_ALL`, see `EPSSetWhichEigenpairs()`.
452
453 A computational interval is also needed when using polynomial filters,
454 see `STFILTER` and section [](#sec:filter).
455
456 In the command-line option, two values must be provided. For an open interval,
457 one can give an infinite, e.g., `-eps_interval 1.0,inf` or `-eps_interval -inf,1.0`.
458 An open interval in the programmatic interface can be specified with
459 `PETSC_MAX_REAL` and -`PETSC_MAX_REAL`.
460
461 Level: intermediate
462
463 .seealso: [](ch:eps), [](#sec:slice), [](#sec:filter), `EPSGetInterval()`, `EPSSetWhichEigenpairs()`, `STFILTER`
464 @*/
465 537 PetscErrorCode EPSSetInterval(EPS eps,PetscReal inta,PetscReal intb)
466 {
467
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
537 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.
537 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
469
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.
537 PetscValidLogicalCollectiveReal(eps,inta,2);
470
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.
537 PetscValidLogicalCollectiveReal(eps,intb,3);
471
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
537 PetscCheck(inta<intb,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONG,"Badly defined interval, must be inta<intb");
472
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
537 if (eps->inta != inta || eps->intb != intb) {
473 507 eps->inta = inta;
474 507 eps->intb = intb;
475 507 eps->state = EPS_STATE_INITIAL;
476 }
477
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.
97 PetscFunctionReturn(PETSC_SUCCESS);
478 }
479
480 /*@
481 EPSGetInterval - Gets the computational interval for spectrum slicing.
482
483 Not Collective
484
485 Input Parameter:
486 . eps - the linear eigensolver context
487
488 Output Parameters:
489 + inta - left end of the interval
490 - intb - right end of the interval
491
492 Level: intermediate
493
494 Note:
495 If the interval was not set by the user, then zeros are returned.
496
497 .seealso: [](ch:eps), `EPSSetInterval()`
498 @*/
499 95 PetscErrorCode EPSGetInterval(EPS eps,PetscReal* inta,PetscReal* intb)
500 {
501
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
95 PetscFunctionBegin;
502
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.
95 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
503
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
95 if (inta) *inta = eps->inta;
504
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
95 if (intb) *intb = eps->intb;
505
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.
95 PetscFunctionReturn(PETSC_SUCCESS);
506 }
507
508 /*@
509 EPSSetST - Associates a spectral transformation object to the eigensolver.
510
511 Collective
512
513 Input Parameters:
514 + eps - the linear eigensolver context
515 - st - the spectral transformation object
516
517 Note:
518 Use `EPSGetST()` to retrieve the spectral transformation context at a later time
519 (for example, to free it at the end of the computations).
520
521 Level: advanced
522
523 .seealso: [](ch:eps), `EPSGetST()`
524 @*/
525 12 PetscErrorCode EPSSetST(EPS eps,ST st)
526 {
527
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
12 PetscFunctionBegin;
528
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.
12 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
529
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.
12 PetscValidHeaderSpecific(st,ST_CLASSID,2);
530
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.
12 PetscCheckSameComm(eps,1,st,2);
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.
12 PetscCall(PetscObjectReference((PetscObject)st));
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.
12 PetscCall(STDestroy(&eps->st));
533 12 eps->st = st;
534
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.
12 PetscFunctionReturn(PETSC_SUCCESS);
535 }
536
537 /*@
538 EPSGetST - Obtain the spectral transformation (`ST`) object associated
539 to the eigensolver object.
540
541 Not Collective
542
543 Input Parameter:
544 . eps - the linear eigensolver context
545
546 Output Parameter:
547 . st - spectral transformation context
548
549 Level: intermediate
550
551 .seealso: [](ch:eps), `EPSSetST()`
552 @*/
553 42830 PetscErrorCode EPSGetST(EPS eps,ST *st)
554 {
555
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
42830 PetscFunctionBegin;
556
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.
42830 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
557
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.
42830 PetscAssertPointer(st,2);
558
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
42830 if (!eps->st) {
559
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.
7359 PetscCall(STCreate(PetscObjectComm((PetscObject)eps),&eps->st));
560
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.
7359 PetscCall(PetscObjectIncrementTabLevel((PetscObject)eps->st,(PetscObject)eps,0));
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.
7359 PetscCall(PetscObjectSetOptions((PetscObject)eps->st,((PetscObject)eps)->options));
562 }
563 42830 *st = eps->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.
42830 PetscFunctionReturn(PETSC_SUCCESS);
565 }
566
567 /*@
568 EPSSetBV - Associates a basis vectors object to the eigensolver.
569
570 Collective
571
572 Input Parameters:
573 + eps - the linear eigensolver context
574 - V - the basis vectors object
575
576 Level: advanced
577
578 .seealso: [](ch:eps), `EPSGetBV()`
579 @*/
580 PetscErrorCode EPSSetBV(EPS eps,BV V)
581 {
582 PetscFunctionBegin;
583 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
584 PetscValidHeaderSpecific(V,BV_CLASSID,2);
585 PetscCheckSameComm(eps,1,V,2);
586 PetscCall(PetscObjectReference((PetscObject)V));
587 PetscCall(BVDestroy(&eps->V));
588 eps->V = V;
589 PetscFunctionReturn(PETSC_SUCCESS);
590 }
591
592 /*@
593 EPSGetBV - Obtain the basis vectors object associated to the eigensolver object.
594
595 Not Collective
596
597 Input Parameter:
598 . eps - the linear eigensolver context
599
600 Output Parameter:
601 . V - basis vectors context
602
603 Level: advanced
604
605 .seealso: [](ch:eps), `EPSSetBV()`
606 @*/
607 7908 PetscErrorCode EPSGetBV(EPS eps,BV *V)
608 {
609
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7908 PetscFunctionBegin;
610
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.
7908 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
611
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.
7908 PetscAssertPointer(V,2);
612
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
7908 if (!eps->V) {
613
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.
7699 PetscCall(BVCreate(PetscObjectComm((PetscObject)eps),&eps->V));
614
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.
7699 PetscCall(PetscObjectIncrementTabLevel((PetscObject)eps->V,(PetscObject)eps,0));
615
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.
7699 PetscCall(PetscObjectSetOptions((PetscObject)eps->V,((PetscObject)eps)->options));
616 }
617 7908 *V = eps->V;
618
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.
7908 PetscFunctionReturn(PETSC_SUCCESS);
619 }
620
621 /*@
622 EPSSetRG - Associates a region object to the eigensolver.
623
624 Collective
625
626 Input Parameters:
627 + eps - the linear eigensolver context
628 - rg - the region object
629
630 Note:
631 Use `EPSGetRG()` to retrieve the region context at a later time (for example,
632 to free it at the end of the computations).
633
634 Level: advanced
635
636 .seealso: [](ch:eps), `EPSGetRG()`
637 @*/
638 50 PetscErrorCode EPSSetRG(EPS eps,RG rg)
639 {
640
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
50 PetscFunctionBegin;
641
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.
50 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
642
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
50 if (rg) {
643
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.
50 PetscValidHeaderSpecific(rg,RG_CLASSID,2);
644
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.
50 PetscCheckSameComm(eps,1,rg,2);
645 }
646
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.
50 PetscCall(PetscObjectReference((PetscObject)rg));
647
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.
50 PetscCall(RGDestroy(&eps->rg));
648 50 eps->rg = rg;
649
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.
50 PetscFunctionReturn(PETSC_SUCCESS);
650 }
651
652 /*@
653 EPSGetRG - Obtain the region object associated to the eigensolver.
654
655 Not Collective
656
657 Input Parameter:
658 . eps - the linear eigensolver context
659
660 Output Parameter:
661 . rg - region context
662
663 Level: advanced
664
665 .seealso: [](ch:eps), `EPSSetRG()`
666 @*/
667 7361 PetscErrorCode EPSGetRG(EPS eps,RG *rg)
668 {
669
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7361 PetscFunctionBegin;
670
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.
7361 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
671
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.
7361 PetscAssertPointer(rg,2);
672
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
7361 if (!eps->rg) {
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.
7361 PetscCall(RGCreate(PetscObjectComm((PetscObject)eps),&eps->rg));
674
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.
7361 PetscCall(PetscObjectIncrementTabLevel((PetscObject)eps->rg,(PetscObject)eps,0));
675
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.
7361 PetscCall(PetscObjectSetOptions((PetscObject)eps->rg,((PetscObject)eps)->options));
676 }
677 7361 *rg = eps->rg;
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.
7361 PetscFunctionReturn(PETSC_SUCCESS);
679 }
680
681 /*@
682 EPSSetDS - Associates a direct solver object to the eigensolver.
683
684 Collective
685
686 Input Parameters:
687 + eps - the linear eigensolver context
688 - ds - the direct solver object
689
690 Note:
691 Use `EPSGetDS()` to retrieve the direct solver context at a later time (for example,
692 to free it at the end of the computations).
693
694 Level: advanced
695
696 .seealso: [](ch:eps), `EPSGetDS()`
697 @*/
698 PetscErrorCode EPSSetDS(EPS eps,DS ds)
699 {
700 PetscFunctionBegin;
701 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
702 PetscValidHeaderSpecific(ds,DS_CLASSID,2);
703 PetscCheckSameComm(eps,1,ds,2);
704 PetscCall(PetscObjectReference((PetscObject)ds));
705 PetscCall(DSDestroy(&eps->ds));
706 eps->ds = ds;
707 PetscFunctionReturn(PETSC_SUCCESS);
708 }
709
710 /*@
711 EPSGetDS - Obtain the direct solver object associated to the eigensolver object.
712
713 Not Collective
714
715 Input Parameter:
716 . eps - the linear eigensolver context
717
718 Output Parameter:
719 . ds - direct solver context
720
721 Level: advanced
722
723 .seealso: [](ch:eps), `EPSSetDS()`
724 @*/
725 6990 PetscErrorCode EPSGetDS(EPS eps,DS *ds)
726 {
727
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
6990 PetscFunctionBegin;
728
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.
6990 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
729
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.
6990 PetscAssertPointer(ds,2);
730
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
6990 if (!eps->ds) {
731
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.
6990 PetscCall(DSCreate(PetscObjectComm((PetscObject)eps),&eps->ds));
732
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.
6990 PetscCall(PetscObjectIncrementTabLevel((PetscObject)eps->ds,(PetscObject)eps,0));
733
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.
6990 PetscCall(PetscObjectSetOptions((PetscObject)eps->ds,((PetscObject)eps)->options));
734 }
735 6990 *ds = eps->ds;
736
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.
6990 PetscFunctionReturn(PETSC_SUCCESS);
737 }
738
739 /*@
740 EPSIsGeneralized - Ask if the `EPS` object corresponds to a generalized
741 eigenvalue problem.
742
743 Not Collective
744
745 Input Parameter:
746 . eps - the linear eigensolver context
747
748 Output Parameter:
749 . is - `PETSC_TRUE` if the problem is generalized
750
751 Level: intermediate
752
753 .seealso: [](ch:eps), `EPSIsHermitian()`, `EPSIsPositive()`, `EPSIsStructured()`
754 @*/
755 16 PetscErrorCode EPSIsGeneralized(EPS eps,PetscBool* is)
756 {
757
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 PetscFunctionBegin;
758
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.
16 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
759
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.
16 PetscAssertPointer(is,2);
760 16 *is = eps->isgeneralized;
761
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.
16 PetscFunctionReturn(PETSC_SUCCESS);
762 }
763
764 /*@
765 EPSIsHermitian - Ask if the `EPS` object corresponds to a Hermitian
766 eigenvalue problem.
767
768 Not Collective
769
770 Input Parameter:
771 . eps - the linear eigensolver context
772
773 Output Parameter:
774 . is - `PETSC_TRUE` if the problem is Hermitian
775
776 Level: intermediate
777
778 .seealso: [](ch:eps), `EPSIsGeneralized()`, `EPSIsPositive()`, `EPSIsStructured()`
779 @*/
780 16 PetscErrorCode EPSIsHermitian(EPS eps,PetscBool* is)
781 {
782
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 PetscFunctionBegin;
783
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.
16 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
784
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.
16 PetscAssertPointer(is,2);
785 16 *is = eps->ishermitian;
786
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.
16 PetscFunctionReturn(PETSC_SUCCESS);
787 }
788
789 /*@
790 EPSIsPositive - Ask if the `EPS` object corresponds to an eigenvalue
791 problem type that requires a positive (semi-) definite matrix $B$.
792
793 Not Collective
794
795 Input Parameter:
796 . eps - the linear eigensolver context
797
798 Output Parameter:
799 . is - `PETSC_TRUE` if the problem is positive (semi-) definite
800
801 Level: intermediate
802
803 .seealso: [](ch:eps), `EPSIsGeneralized()`, `EPSIsHermitian()`, `EPSIsStructured()`
804 @*/
805 16 PetscErrorCode EPSIsPositive(EPS eps,PetscBool* is)
806 {
807
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 PetscFunctionBegin;
808
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.
16 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
809
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.
16 PetscAssertPointer(is,2);
810 16 *is = eps->ispositive;
811
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.
16 PetscFunctionReturn(PETSC_SUCCESS);
812 }
813
814 /*@
815 EPSIsStructured - Ask if the `EPS` object corresponds to a structured
816 eigenvalue problem.
817
818 Not Collective
819
820 Input Parameter:
821 . eps - the linear eigensolver context
822
823 Output Parameter:
824 . is - `PETSC_TRUE` if the problem is structured
825
826 Note:
827 The result will be true if the problem type has been set to some
828 structured type such as `EPS_BSE`. This is independent of whether the
829 input matrix has been built with a certain structure with a helper function.
830
831 Level: intermediate
832
833 .seealso: [](ch:eps), `EPSIsGeneralized()`, `EPSIsHermitian()`, `EPSIsPositive()`, `EPSSetProblemType()`
834 @*/
835 PetscErrorCode EPSIsStructured(EPS eps,PetscBool* is)
836 {
837 PetscFunctionBegin;
838 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
839 PetscAssertPointer(is,2);
840 *is = eps->isstructured;
841 PetscFunctionReturn(PETSC_SUCCESS);
842 }
843