GCC Code Coverage Report


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