GCC Code Coverage Report


Directory: ./
File: src/eps/interface/epsbasic.c
Date: 2026-01-13 04:10:43
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 6969 PetscErrorCode EPSCreate(MPI_Comm comm,EPS *outeps)
49 {
50 6969 EPS eps;
51
52
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
6969 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.
6969 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.
6969 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.
6969 PetscCall(SlepcHeaderCreate(eps,EPS_CLASSID,"EPS","Eigenvalue Problem Solver","EPS",comm,EPSDestroy,EPSView));
56
57 6969 eps->max_it = PETSC_DETERMINE;
58 6969 eps->nev = 0;
59 6969 eps->ncv = PETSC_DETERMINE;
60 6969 eps->mpd = PETSC_DETERMINE;
61 6969 eps->nini = 0;
62 6969 eps->nds = 0;
63 6969 eps->target = 0.0;
64 6969 eps->tol = PETSC_DETERMINE;
65 6969 eps->thres = PETSC_MIN_REAL;
66 6969 eps->threlative = PETSC_FALSE;
67 6969 eps->conv = EPS_CONV_REL;
68 6969 eps->stop = EPS_STOP_BASIC;
69 6969 eps->which = (EPSWhich)0;
70 6969 eps->inta = 0.0;
71 6969 eps->intb = 0.0;
72 6969 eps->problem_type = (EPSProblemType)0;
73 6969 eps->extraction = EPS_RITZ;
74 6969 eps->balance = EPS_BALANCE_NONE;
75 6969 eps->balance_its = 5;
76 6969 eps->balance_cutoff = 1e-8;
77 6969 eps->trueres = PETSC_FALSE;
78 6969 eps->trackall = PETSC_FALSE;
79 6969 eps->purify = PETSC_TRUE;
80 6969 eps->twosided = PETSC_FALSE;
81
82 6969 eps->converged = EPSConvergedRelative;
83 6969 eps->convergeduser = NULL;
84 6969 eps->convergeddestroy= NULL;
85 6969 eps->stopping = EPSStoppingBasic;
86 6969 eps->stoppinguser = NULL;
87 6969 eps->stoppingdestroy = NULL;
88 6969 eps->arbitrary = NULL;
89 6969 eps->arbitrarydestroy= NULL;
90 6969 eps->convergedctx = NULL;
91 6969 eps->stoppingctx = NULL;
92 6969 eps->arbitraryctx = NULL;
93 6969 eps->numbermonitors = 0;
94
95 6969 eps->st = NULL;
96 6969 eps->ds = NULL;
97 6969 eps->V = NULL;
98 6969 eps->W = NULL;
99 6969 eps->rg = NULL;
100 6969 eps->D = NULL;
101 6969 eps->IS = NULL;
102 6969 eps->ISL = NULL;
103 6969 eps->defl = NULL;
104 6969 eps->eigr = NULL;
105 6969 eps->eigi = NULL;
106 6969 eps->errest = NULL;
107 6969 eps->rr = NULL;
108 6969 eps->ri = NULL;
109 6969 eps->perm = NULL;
110 6969 eps->nwork = 0;
111 6969 eps->work = NULL;
112 6969 eps->data = NULL;
113
114 6969 eps->state = EPS_STATE_INITIAL;
115 6969 eps->categ = EPS_CATEGORY_KRYLOV;
116 6969 eps->nconv = 0;
117 6969 eps->its = 0;
118 6969 eps->nloc = 0;
119 6969 eps->nrma = 0.0;
120 6969 eps->nrmb = 0.0;
121 6969 eps->useds = PETSC_FALSE;
122 6969 eps->isgeneralized = PETSC_FALSE;
123 6969 eps->ispositive = PETSC_FALSE;
124 6969 eps->ishermitian = PETSC_FALSE;
125 6969 eps->isstructured = PETSC_FALSE;
126 6969 eps->reason = EPS_CONVERGED_ITERATING;
127
128
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6969 PetscCall(PetscNew(&eps->sc));
129 6969 *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.
6969 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 7171 PetscErrorCode EPSSetType(EPS eps,EPSType type)
161 {
162 7171 PetscErrorCode (*r)(EPS);
163 7171 PetscBool match;
164
165
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7171 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.
7171 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.
7171 PetscAssertPointer(type,2);
168
169
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
7171 PetscCall(PetscObjectTypeCompare((PetscObject)eps,type,&match));
170
8/14
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
7171 if (match) PetscFunctionReturn(PETSC_SUCCESS);
171
172
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6888 PetscCall(PetscFunctionListFind(EPSList,type,&r));
173
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
6888 PetscCheck(r,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown EPS type given: %s",type);
174
175
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
6888 PetscTryTypeMethod(eps,destroy);
176
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6888 PetscCall(PetscMemzero(eps->ops,sizeof(struct _EPSOps)));
177
178 6888 eps->state = EPS_STATE_INITIAL;
179
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6888 PetscCall(PetscObjectChangeTypeName((PetscObject)eps,type));
180
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6888 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.
1350 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 1158 PetscErrorCode EPSGetType(EPS eps,EPSType *type)
200 {
201
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1158 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.
1158 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.
1158 PetscAssertPointer(type,2);
204 1158 *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.
1158 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 94320 PetscErrorCode EPSRegister(const char *name,PetscErrorCode (*function)(EPS))
236 {
237
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
94320 PetscFunctionBegin;
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.
94320 PetscCall(EPSInitializePackage());
239
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.
94320 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.
19439 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 38118 PetscErrorCode EPSMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,EPSMonitorRegisterFn *monitor,EPSMonitorRegisterCreateFn *create,EPSMonitorRegisterDestroyFn *destroy)
280 {
281 38118 char key[PETSC_MAX_PATH_LEN];
282
283
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
38118 PetscFunctionBegin;
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.
38118 PetscCall(EPSInitializePackage());
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.
38118 PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
286
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.
38118 PetscCall(PetscFunctionListAdd(&EPSMonitorList,key,monitor));
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.
38118 if (create) PetscCall(PetscFunctionListAdd(&EPSMonitorCreateList,key,create));
288
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.
38118 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.
7518 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 8800 PetscErrorCode EPSReset(EPS eps)
312 {
313
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8800 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.
8800 if (eps) PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
315
1/12
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
7101 if (!eps) PetscFunctionReturn(PETSC_SUCCESS);
316
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.
8800 PetscTryTypeMethod(eps,reset);
317
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.
8800 if (eps->st) PetscCall(STReset(eps->st));
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.
8800 PetscCall(VecDestroy(&eps->D));
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.
8800 PetscCall(BVDestroy(&eps->V));
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.
8800 PetscCall(BVDestroy(&eps->W));
321
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
8800 PetscCall(VecDestroyVecs(eps->nwork,&eps->work));
322 8800 eps->nwork = 0;
323 8800 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.
8800 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 7792 PetscErrorCode EPSDestroy(EPS *eps)
340 {
341
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7792 PetscFunctionBegin;
342
8/14
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
7792 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.
7388 PetscValidHeaderSpecific(*eps,EPS_CLASSID,1);
344
8/14
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
7388 if (--((PetscObject)*eps)->refct > 0) { *eps = NULL; PetscFunctionReturn(PETSC_SUCCESS); }
345
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6969 PetscCall(EPSReset(*eps));
346
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.
6969 PetscTryTypeMethod(*eps,destroy);
347
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
6969 if ((*eps)->eigr) PetscCall(PetscFree4((*eps)->eigr,(*eps)->eigi,(*eps)->errest,(*eps)->perm));
348
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.
6969 if ((*eps)->rr) PetscCall(PetscFree2((*eps)->rr,(*eps)->ri));
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.
6969 PetscCall(STDestroy(&(*eps)->st));
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.
6969 PetscCall(RGDestroy(&(*eps)->rg));
351
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6969 PetscCall(DSDestroy(&(*eps)->ds));
352
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.
6969 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 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6969 PetscCall(SlepcBasisDestroy_Private(&(*eps)->nds,&(*eps)->defl));
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.
6969 PetscCall(SlepcBasisDestroy_Private(&(*eps)->nini,&(*eps)->IS));
356
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.
6969 PetscCall(SlepcBasisDestroy_Private(&(*eps)->ninil,&(*eps)->ISL));
357
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
6969 if ((*eps)->convergeddestroy) PetscCall((*(*eps)->convergeddestroy)(&(*eps)->convergedctx));
358
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.
6969 if ((*eps)->stoppingdestroy) PetscCall((*(*eps)->stoppingdestroy)(&(*eps)->stoppingctx));
359
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.
6969 if ((*eps)->arbitrarydestroy) PetscCall((*(*eps)->arbitrarydestroy)(&(*eps)->arbitraryctx));
360
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6969 PetscCall(EPSMonitorCancel(*eps));
361
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.
6969 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.
1348 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 1739 PetscErrorCode EPSSetTarget(EPS eps,PetscScalar target)
393 {
394
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1739 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.
1739 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.
1739 PetscValidLogicalCollectiveScalar(eps,target,2);
397 1739 eps->target = target;
398
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));
399
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));
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 13734 PetscErrorCode EPSGetTarget(EPS eps,PetscScalar* target)
422 {
423
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13734 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.
13734 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.
13734 PetscAssertPointer(target,2);
426 13734 *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.
13734 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 537 PetscErrorCode EPSSetInterval(EPS eps,PetscReal inta,PetscReal intb)
462 {
463
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
537 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.
537 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.
537 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.
537 PetscValidLogicalCollectiveReal(eps,intb,3);
467
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");
468
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) {
469 507 eps->inta = inta;
470 507 eps->intb = intb;
471 507 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 95 PetscErrorCode EPSGetInterval(EPS eps,PetscReal* inta,PetscReal* intb)
496 {
497
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
95 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.
95 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
499
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
95 if (inta) *inta = eps->inta;
500
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
95 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.
95 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 12 PetscErrorCode EPSSetST(EPS eps,ST st)
522 {
523
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
12 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.
12 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.
12 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.
12 PetscCheckSameComm(eps,1,st,2);
527
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));
528
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));
529 12 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.
12 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 42426 PetscErrorCode EPSGetST(EPS eps,ST *st)
550 {
551
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
42426 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.
42426 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.
42426 PetscAssertPointer(st,2);
554
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
42426 if (!eps->st) {
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.
6866 PetscCall(STCreate(PetscObjectComm((PetscObject)eps),&eps->st));
556
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.
6866 PetscCall(PetscObjectIncrementTabLevel((PetscObject)eps->st,(PetscObject)eps,0));
557
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.
6866 PetscCall(PetscObjectSetOptions((PetscObject)eps->st,((PetscObject)eps)->options));
558 }
559 42426 *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.
42426 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 7415 PetscErrorCode EPSGetBV(EPS eps,BV *V)
604 {
605
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7415 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.
7415 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.
7415 PetscAssertPointer(V,2);
608
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
7415 if (!eps->V) {
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.
7206 PetscCall(BVCreate(PetscObjectComm((PetscObject)eps),&eps->V));
610
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.
7206 PetscCall(PetscObjectIncrementTabLevel((PetscObject)eps->V,(PetscObject)eps,0));
611
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.
7206 PetscCall(PetscObjectSetOptions((PetscObject)eps->V,((PetscObject)eps)->options));
612 }
613 7415 *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.
7415 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 50 PetscErrorCode EPSSetRG(EPS eps,RG rg)
635 {
636
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
50 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.
50 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
638
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
50 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.
50 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.
50 PetscCheckSameComm(eps,1,rg,2);
641 }
642
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));
643
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));
644 50 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.
50 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 6868 PetscErrorCode EPSGetRG(EPS eps,RG *rg)
664 {
665
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
6868 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.
6868 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.
6868 PetscAssertPointer(rg,2);
668
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
6868 if (!eps->rg) {
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.
6868 PetscCall(RGCreate(PetscObjectComm((PetscObject)eps),&eps->rg));
670
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.
6868 PetscCall(PetscObjectIncrementTabLevel((PetscObject)eps->rg,(PetscObject)eps,0));
671
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.
6868 PetscCall(PetscObjectSetOptions((PetscObject)eps->rg,((PetscObject)eps)->options));
672 }
673 6868 *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.
6868 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 6497 PetscErrorCode EPSGetDS(EPS eps,DS *ds)
722 {
723
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
6497 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.
6497 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.
6497 PetscAssertPointer(ds,2);
726
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
6497 if (!eps->ds) {
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.
6497 PetscCall(DSCreate(PetscObjectComm((PetscObject)eps),&eps->ds));
728
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.
6497 PetscCall(PetscObjectIncrementTabLevel((PetscObject)eps->ds,(PetscObject)eps,0));
729
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.
6497 PetscCall(PetscObjectSetOptions((PetscObject)eps->ds,((PetscObject)eps)->options));
730 }
731 6497 *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.
6497 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 16 PetscErrorCode EPSIsGeneralized(EPS eps,PetscBool* is)
752 {
753
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 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.
16 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.
16 PetscAssertPointer(is,2);
756 16 *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.
16 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 16 PetscErrorCode EPSIsHermitian(EPS eps,PetscBool* is)
777 {
778
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 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.
16 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.
16 PetscAssertPointer(is,2);
781 16 *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.
16 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 16 PetscErrorCode EPSIsPositive(EPS eps,PetscBool* is)
802 {
803
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 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.
16 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.
16 PetscAssertPointer(is,2);
806 16 *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.
16 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