GCC Code Coverage Report


Directory: ./
File: src/eps/interface/epsbasic.c
Date: 2025-11-19 04:19:03
Exec Total Coverage
Lines: 253 277 91.3%
Functions: 20 23 87.0%
Branches: 612 1586 38.6%

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