GCC Code Coverage Report


Directory: ./
File: src/pep/interface/pepbasic.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 256 274 93.4%
Functions: 18 20 90.0%
Branches: 637 1566 40.7%

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