GCC Code Coverage Report


Directory: ./
File: src/nep/interface/nepbasic.c
Date: 2026-06-15 03:58:11
Exec Total Coverage
Lines: 371 397 93.5%
Functions: 24 27 88.9%
Branches: 1024 2560 40.0%

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 NEP routines
12 */
13
14 #include <slepc/private/nepimpl.h> /*I "slepcnep.h" I*/
15
16 /* Logging support */
17 PetscClassId NEP_CLASSID = 0;
18 PetscLogEvent NEP_SetUp = 0,NEP_Solve = 0,NEP_Refine = 0,NEP_FunctionEval = 0,NEP_JacobianEval = 0,NEP_Resolvent = 0,NEP_CISS_SVD = 0;
19
20 /* List of registered NEP routines */
21 PetscFunctionList NEPList = NULL;
22 PetscBool NEPRegisterAllCalled = PETSC_FALSE;
23
24 /* List of registered NEP monitors */
25 PetscFunctionList NEPMonitorList = NULL;
26 PetscFunctionList NEPMonitorCreateList = NULL;
27 PetscFunctionList NEPMonitorDestroyList = NULL;
28 PetscBool NEPMonitorRegisterAllCalled = PETSC_FALSE;
29
30 /*@
31 NEPCreate - Creates the `NEP` context.
32
33 Collective
34
35 Input Parameter:
36 . comm - MPI communicator
37
38 Output Parameter:
39 . outnep - location to put the `NEP` context
40
41 Note:
42 The default `NEP` type is `NEPRII`.
43
44 Level: beginner
45
46 .seealso: [](ch:nep), `NEPSetUp()`, `NEPSolve()`, `NEPDestroy()`, `NEP`
47 @*/
48 1416 PetscErrorCode NEPCreate(MPI_Comm comm,NEP *outnep)
49 {
50 1416 NEP nep;
51
52
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1416 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.
1416 PetscAssertPointer(outnep,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.
1416 PetscCall(NEPInitializePackage());
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.
1416 PetscCall(SlepcHeaderCreate(nep,NEP_CLASSID,"NEP","Nonlinear Eigenvalue Problem","NEP",comm,NEPDestroy,NEPView));
56
57 1416 nep->max_it = PETSC_DETERMINE;
58 1416 nep->nev = 1;
59 1416 nep->ncv = PETSC_DETERMINE;
60 1416 nep->mpd = PETSC_DETERMINE;
61 1416 nep->nini = 0;
62 1416 nep->target = 0.0;
63 1416 nep->tol = PETSC_DETERMINE;
64 1416 nep->conv = NEP_CONV_REL;
65 1416 nep->stop = NEP_STOP_BASIC;
66 1416 nep->which = (NEPWhich)0;
67 1416 nep->problem_type = (NEPProblemType)0;
68 1416 nep->refine = NEP_REFINE_NONE;
69 1416 nep->npart = 1;
70 1416 nep->rtol = PETSC_DETERMINE;
71 1416 nep->rits = PETSC_DETERMINE;
72 1416 nep->scheme = (NEPRefineScheme)0;
73 1416 nep->trackall = PETSC_FALSE;
74 1416 nep->twosided = PETSC_FALSE;
75
76 1416 nep->computefunction = NULL;
77 1416 nep->computejacobian = NULL;
78 1416 nep->functionctx = NULL;
79 1416 nep->jacobianctx = NULL;
80 1416 nep->converged = NEPConvergedRelative;
81 1416 nep->convergeduser = NULL;
82 1416 nep->convergeddestroy= NULL;
83 1416 nep->stopping = NEPStoppingBasic;
84 1416 nep->stoppinguser = NULL;
85 1416 nep->stoppingdestroy = NULL;
86 1416 nep->convergedctx = NULL;
87 1416 nep->stoppingctx = NULL;
88 1416 nep->numbermonitors = 0;
89
90 1416 nep->ds = NULL;
91 1416 nep->V = NULL;
92 1416 nep->W = NULL;
93 1416 nep->rg = NULL;
94 1416 nep->function = NULL;
95 1416 nep->function_pre = NULL;
96 1416 nep->jacobian = NULL;
97 1416 nep->A = NULL;
98 1416 nep->f = NULL;
99 1416 nep->nt = 0;
100 1416 nep->mstr = UNKNOWN_NONZERO_PATTERN;
101 1416 nep->P = NULL;
102 1416 nep->mstrp = UNKNOWN_NONZERO_PATTERN;
103 1416 nep->IS = NULL;
104 1416 nep->eigr = NULL;
105 1416 nep->eigi = NULL;
106 1416 nep->errest = NULL;
107 1416 nep->perm = NULL;
108 1416 nep->nwork = 0;
109 1416 nep->work = NULL;
110 1416 nep->data = NULL;
111
112 1416 nep->state = NEP_STATE_INITIAL;
113 1416 nep->nconv = 0;
114 1416 nep->its = 0;
115 1416 nep->n = 0;
116 1416 nep->nloc = 0;
117 1416 nep->nrma = NULL;
118 1416 nep->fui = (NEPUserInterface)0;
119 1416 nep->useds = PETSC_FALSE;
120 1416 nep->resolvent = NULL;
121 1416 nep->reason = NEP_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.
1416 PetscCall(PetscNew(&nep->sc));
124 1416 *outnep = nep;
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.
1416 PetscFunctionReturn(PETSC_SUCCESS);
126 }
127
128 /*@
129 NEPSetType - Selects the particular solver to be used in the `NEP` object.
130
131 Logically Collective
132
133 Input Parameters:
134 + nep - the nonlinear eigensolver context
135 - type - a known method
136
137 Options Database Key:
138 . -nep_type type - sets the method; use `-help` for a list of available methods
139
140 Notes:
141 See `NEPType` for available methods. The default is `NEPRII`.
142
143 Normally, it is best to use the `NEPSetFromOptions()` command and
144 then set the `NEP` type from the options database rather than by using
145 this routine. Using the options database provides the user with
146 maximum flexibility in evaluating the different available methods.
147 The `NEPSetType()` routine is provided for those situations where it
148 is necessary to set the iterative solver independently of the command
149 line or options database.
150
151 Level: intermediate
152
153 .seealso: [](ch:nep), `NEPType`
154 @*/
155 1456 PetscErrorCode NEPSetType(NEP nep,NEPType type)
156 {
157 1456 PetscErrorCode (*r)(NEP);
158 1456 PetscBool match;
159
160
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1456 PetscFunctionBegin;
161
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.
1456 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
162
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.
1456 PetscAssertPointer(type,2);
163
164
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.
1456 PetscCall(PetscObjectTypeCompare((PetscObject)nep,type,&match));
165
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.
1456 if (match) PetscFunctionReturn(PETSC_SUCCESS);
166
167
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.
1426 PetscCall(PetscFunctionListFind(NEPList,type,&r));
168
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1426 PetscCheck(r,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown NEP type given: %s",type);
169
170
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.
1426 PetscTryTypeMethod(nep,destroy);
171
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.
1426 PetscCall(PetscMemzero(nep->ops,sizeof(struct _NEPOps)));
172
173 1426 nep->state = NEP_STATE_INITIAL;
174
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.
1426 PetscCall(PetscObjectChangeTypeName((PetscObject)nep,type));
175
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.
1426 PetscCall((*r)(nep));
176
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.
271 PetscFunctionReturn(PETSC_SUCCESS);
177 }
178
179 /*@
180 NEPGetType - Gets the `NEP` type as a string from the `NEP` object.
181
182 Not Collective
183
184 Input Parameter:
185 . nep - the nonlinear eigensolver context
186
187 Output Parameter:
188 . type - name of `NEP` method
189
190 Note:
191 `type` should not be retained for later use as it will be an invalid pointer
192 if the `NEPType` of `nep` is changed.
193
194 Level: intermediate
195
196 .seealso: [](ch:nep), `NEPSetType()`, `PetscObjectTypeCompare()`, `PetscObjectTypeCompareAny()`
197 @*/
198 298 PetscErrorCode NEPGetType(NEP nep,NEPType *type)
199 {
200
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
298 PetscFunctionBegin;
201
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
298 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
202
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
298 PetscAssertPointer(type,2);
203 298 *type = ((PetscObject)nep)->type_name;
204
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
298 PetscFunctionReturn(PETSC_SUCCESS);
205 }
206
207 /*@C
208 NEPRegister - Adds a method to the nonlinear eigenproblem solver package.
209
210 Not Collective
211
212 Input Parameters:
213 + name - name of a new user-defined solver
214 - function - routine to create the solver context
215
216 Note:
217 `NEPRegister()` may be called multiple times to add several user-defined solvers.
218
219 Example Usage:
220 .vb
221 NEPRegister("my_solver",MySolverCreate);
222 .ve
223
224 Then, your solver can be chosen with the procedural interface via
225 .vb
226 NEPSetType(nep,"my_solver")
227 .ve
228 or at runtime via the option `-nep_type my_solver`.
229
230 Level: advanced
231
232 .seealso: [](ch:nep), `NEPRegisterAll()`
233 @*/
234 7540 PetscErrorCode NEPRegister(const char *name,PetscErrorCode (*function)(NEP))
235 {
236
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7540 PetscFunctionBegin;
237
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
7540 PetscCall(NEPInitializePackage());
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.
7540 PetscCall(PetscFunctionListAdd(&NEPList,name,function));
239
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
1405 PetscFunctionReturn(PETSC_SUCCESS);
240 }
241
242 /*@C
243 NEPMonitorRegister - Registers a `NEP` monitor routine that may be accessed with
244 `NEPMonitorSetFromOptions()`.
245
246 Not Collective
247
248 Input Parameters:
249 + name - name of a new monitor routine
250 . vtype - a `PetscViewerType` for the output
251 . format - a `PetscViewerFormat` for the output
252 . monitor - monitor routine, see `NEPMonitorRegisterFn`
253 . create - creation routine, or `NULL`
254 - destroy - destruction routine, or `NULL`
255
256 Notes:
257 `NEPMonitorRegister()` may be called multiple times to add several user-defined monitors.
258
259 The calling sequence for the given function matches the calling sequence of `NEPMonitorFn`
260 functions passed to `NEPMonitorSet()` with the additional requirement that its final argument
261 be a `PetscViewerAndFormat`.
262
263 Example Usage:
264 .vb
265 NEPMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL);
266 .ve
267
268 Then, your monitor can be chosen with the procedural interface via
269 .vb
270 NEPMonitorSetFromOptions(nep,"-nep_monitor_my_monitor","my_monitor",NULL);
271 .ve
272 or at runtime via the option `-nep_monitor_my_monitor`.
273
274 Level: advanced
275
276 .seealso: [](ch:nep), `NEPMonitorSet()`, `NEPMonitorRegisterAll()`, `NEPMonitorSetFromOptions()`
277 @*/
278 8118 PetscErrorCode NEPMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,NEPMonitorRegisterFn *monitor,NEPMonitorRegisterCreateFn *create,NEPMonitorRegisterDestroyFn *destroy)
279 {
280 8118 char key[PETSC_MAX_PATH_LEN];
281
282
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8118 PetscFunctionBegin;
283
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
8118 PetscCall(NEPInitializePackage());
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.
8118 PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
285
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
8118 PetscCall(PetscFunctionListAdd(&NEPMonitorList,key,monitor));
286
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
8118 if (create) PetscCall(PetscFunctionListAdd(&NEPMonitorCreateList,key,create));
287
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
8118 if (destroy) PetscCall(PetscFunctionListAdd(&NEPMonitorDestroyList,key,destroy));
288
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
1512 PetscFunctionReturn(PETSC_SUCCESS);
289 }
290
291 /*
292 NEPReset_Problem - Destroys the problem matrices.
293 */
294 2529 PetscErrorCode NEPReset_Problem(NEP nep)
295 {
296 2529 PetscInt i;
297
298
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2529 PetscFunctionBegin;
299
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.
2529 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
300
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.
2529 PetscCall(MatDestroy(&nep->function));
301
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.
2529 PetscCall(MatDestroy(&nep->function_pre));
302
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.
2529 PetscCall(MatDestroy(&nep->jacobian));
303
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2529 if (nep->fui==NEP_USER_INTERFACE_SPLIT) {
304
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.
1058 PetscCall(MatDestroyMatrices(nep->nt,&nep->A));
305
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
4110 for (i=0;i<nep->nt;i++) PetscCall(FNDestroy(&nep->f[i]));
306
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.
1058 PetscCall(PetscFree(nep->f));
307
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.
1058 PetscCall(PetscFree(nep->nrma));
308
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.
1058 if (nep->P) PetscCall(MatDestroyMatrices(nep->nt,&nep->P));
309 1058 nep->nt = 0;
310 }
311
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.
468 PetscFunctionReturn(PETSC_SUCCESS);
312 }
313 /*@
314 NEPReset - Resets the `NEP` context to the initial state (prior to setup)
315 and destroys any allocated `Vec`s and `Mat`s.
316
317 Collective
318
319 Input Parameter:
320 . nep - the nonlinear eigensolver context
321
322 Level: advanced
323
324 .seealso: [](ch:nep), `NEPDestroy()`
325 @*/
326 1616 PetscErrorCode NEPReset(NEP nep)
327 {
328
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1616 PetscFunctionBegin;
329
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.
1616 if (nep) PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
330
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.
1326 if (!nep) PetscFunctionReturn(PETSC_SUCCESS);
331
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.
1616 PetscTryTypeMethod(nep,reset);
332
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.
1616 if (nep->refineksp) PetscCall(KSPReset(nep->refineksp));
333
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.
1616 PetscCall(NEPReset_Problem(nep));
334
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.
1616 PetscCall(BVDestroy(&nep->V));
335
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.
1616 PetscCall(BVDestroy(&nep->W));
336
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.
1616 PetscCall(VecDestroyVecs(nep->nwork,&nep->work));
337
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.
1616 PetscCall(MatDestroy(&nep->resolvent));
338 1616 nep->nwork = 0;
339 1616 nep->state = NEP_STATE_INITIAL;
340
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.
1616 PetscFunctionReturn(PETSC_SUCCESS);
341 }
342
343 /*@
344 NEPDestroy - Destroys the `NEP` context.
345
346 Collective
347
348 Input Parameter:
349 . nep - the nonlinear eigensolver context
350
351 Level: beginner
352
353 .seealso: [](ch:nep), `NEPCreate()`, `NEPSetUp()`, `NEPSolve()`
354 @*/
355 1437 PetscErrorCode NEPDestroy(NEP *nep)
356 {
357
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1437 PetscFunctionBegin;
358
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.
1437 if (!*nep) PetscFunctionReturn(PETSC_SUCCESS);
359
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.
1437 PetscValidHeaderSpecific(*nep,NEP_CLASSID,1);
360
2/14
✓ Branch 0 taken 2 times.
✓ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
1437 if (--((PetscObject)*nep)->refct > 0) { *nep = NULL; PetscFunctionReturn(PETSC_SUCCESS); }
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.
1416 PetscCall(NEPReset(*nep));
362
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.
1416 PetscTryTypeMethod(*nep,destroy);
363
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.
1416 if ((*nep)->eigr) PetscCall(PetscFree4((*nep)->eigr,(*nep)->eigi,(*nep)->errest,(*nep)->perm));
364
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1416 PetscCall(RGDestroy(&(*nep)->rg));
365
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1416 PetscCall(DSDestroy(&(*nep)->ds));
366
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.
1416 PetscCall(KSPDestroy(&(*nep)->refineksp));
367
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.
1416 PetscCall(PetscSubcommDestroy(&(*nep)->refinesubc));
368
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.
1416 PetscCall(PetscFree((*nep)->sc));
369 /* just in case the initial vectors have not been used */
370
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.
1416 PetscCall(SlepcBasisDestroy_Private(&(*nep)->nini,&(*nep)->IS));
371
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.
1416 if ((*nep)->convergeddestroy) PetscCall((*(*nep)->convergeddestroy)(&(*nep)->convergedctx));
372
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.
1416 if ((*nep)->stoppingdestroy) PetscCall((*(*nep)->stoppingdestroy)(&(*nep)->stoppingctx));
373
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.
1416 PetscCall(NEPMonitorCancel(*nep));
374
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.
1416 PetscCall(PetscHeaderDestroy(nep));
375
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.
250 PetscFunctionReturn(PETSC_SUCCESS);
376 }
377
378 /*@
379 NEPSetBV - Associates a basis vectors object to the nonlinear eigensolver.
380
381 Collective
382
383 Input Parameters:
384 + nep - the nonlinear eigensolver context
385 - bv - the basis vectors object
386
387 Note:
388 Use `NEPGetBV()` to retrieve the basis vectors context (for example,
389 to free it at the end of the computations).
390
391 Level: advanced
392
393 .seealso: [](ch:nep), `NEPGetBV()`
394 @*/
395 PetscErrorCode NEPSetBV(NEP nep,BV bv)
396 {
397 PetscFunctionBegin;
398 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
399 PetscValidHeaderSpecific(bv,BV_CLASSID,2);
400 PetscCheckSameComm(nep,1,bv,2);
401 PetscCall(PetscObjectReference((PetscObject)bv));
402 PetscCall(BVDestroy(&nep->V));
403 nep->V = bv;
404 PetscFunctionReturn(PETSC_SUCCESS);
405 }
406
407 /*@
408 NEPGetBV - Obtain the basis vectors object associated to the nonlinear
409 eigensolver object.
410
411 Not Collective
412
413 Input Parameter:
414 . nep - the nonlinear eigensolver context
415
416 Output Parameter:
417 . bv - basis vectors context
418
419 Level: advanced
420
421 .seealso: [](ch:nep), `NEPSetBV()`
422 @*/
423 1535 PetscErrorCode NEPGetBV(NEP nep,BV *bv)
424 {
425
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1535 PetscFunctionBegin;
426
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.
1535 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
427
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.
1535 PetscAssertPointer(bv,2);
428
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1535 if (!nep->V) {
429
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.
1525 PetscCall(BVCreate(PetscObjectComm((PetscObject)nep),&nep->V));
430
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.
1525 PetscCall(PetscObjectIncrementTabLevel((PetscObject)nep->V,(PetscObject)nep,0));
431
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.
1525 PetscCall(PetscObjectSetOptions((PetscObject)nep->V,((PetscObject)nep)->options));
432 }
433 1535 *bv = nep->V;
434
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.
1535 PetscFunctionReturn(PETSC_SUCCESS);
435 }
436
437 /*@
438 NEPSetRG - Associates a region object to the nonlinear eigensolver.
439
440 Collective
441
442 Input Parameters:
443 + nep - the nonlinear eigensolver context
444 - rg - the region object
445
446 Note:
447 Use `NEPGetRG()` to retrieve the region context (for example,
448 to free it at the end of the computations).
449
450 Level: advanced
451
452 .seealso: [](ch:nep), `NEPGetRG()`
453 @*/
454 24 PetscErrorCode NEPSetRG(NEP nep,RG rg)
455 {
456
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
24 PetscFunctionBegin;
457
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.
24 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
458
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
24 if (rg) {
459
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.
24 PetscValidHeaderSpecific(rg,RG_CLASSID,2);
460
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.
24 PetscCheckSameComm(nep,1,rg,2);
461 }
462
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.
24 PetscCall(PetscObjectReference((PetscObject)rg));
463
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.
24 PetscCall(RGDestroy(&nep->rg));
464 24 nep->rg = rg;
465
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.
24 PetscFunctionReturn(PETSC_SUCCESS);
466 }
467
468 /*@
469 NEPGetRG - Obtain the region object associated to the
470 nonlinear eigensolver object.
471
472 Not Collective
473
474 Input Parameter:
475 . nep - the nonlinear eigensolver context
476
477 Output Parameter:
478 . rg - region context
479
480 Level: advanced
481
482 .seealso: [](ch:nep), `NEPSetRG()`
483 @*/
484 1317 PetscErrorCode NEPGetRG(NEP nep,RG *rg)
485 {
486
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1317 PetscFunctionBegin;
487
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.
1317 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
488
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.
1317 PetscAssertPointer(rg,2);
489
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1317 if (!nep->rg) {
490
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.
1301 PetscCall(RGCreate(PetscObjectComm((PetscObject)nep),&nep->rg));
491
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.
1301 PetscCall(PetscObjectIncrementTabLevel((PetscObject)nep->rg,(PetscObject)nep,0));
492
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.
1301 PetscCall(PetscObjectSetOptions((PetscObject)nep->rg,((PetscObject)nep)->options));
493 }
494 1317 *rg = nep->rg;
495
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.
1317 PetscFunctionReturn(PETSC_SUCCESS);
496 }
497
498 /*@
499 NEPSetDS - Associates a direct solver object to the nonlinear eigensolver.
500
501 Collective
502
503 Input Parameters:
504 + nep - the nonlinear eigensolver context
505 - ds - the direct solver object
506
507 Note:
508 Use `NEPGetDS()` to retrieve the direct solver context (for example,
509 to free it at the end of the computations).
510
511 Level: advanced
512
513 .seealso: [](ch:nep), `NEPGetDS()`
514 @*/
515 PetscErrorCode NEPSetDS(NEP nep,DS ds)
516 {
517 PetscFunctionBegin;
518 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
519 PetscValidHeaderSpecific(ds,DS_CLASSID,2);
520 PetscCheckSameComm(nep,1,ds,2);
521 PetscCall(PetscObjectReference((PetscObject)ds));
522 PetscCall(DSDestroy(&nep->ds));
523 nep->ds = ds;
524 PetscFunctionReturn(PETSC_SUCCESS);
525 }
526
527 /*@
528 NEPGetDS - Obtain the direct solver object associated to the
529 nonlinear eigensolver object.
530
531 Not Collective
532
533 Input Parameter:
534 . nep - the nonlinear eigensolver context
535
536 Output Parameter:
537 . ds - direct solver context
538
539 Level: advanced
540
541 .seealso: [](ch:nep), `NEPSetDS()`
542 @*/
543 1081 PetscErrorCode NEPGetDS(NEP nep,DS *ds)
544 {
545
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1081 PetscFunctionBegin;
546
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.
1081 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
547
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.
1081 PetscAssertPointer(ds,2);
548
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1081 if (!nep->ds) {
549
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.
1071 PetscCall(DSCreate(PetscObjectComm((PetscObject)nep),&nep->ds));
550
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.
1071 PetscCall(PetscObjectIncrementTabLevel((PetscObject)nep->ds,(PetscObject)nep,0));
551
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.
1071 PetscCall(PetscObjectSetOptions((PetscObject)nep->ds,((PetscObject)nep)->options));
552 }
553 1081 *ds = nep->ds;
554
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.
1081 PetscFunctionReturn(PETSC_SUCCESS);
555 }
556
557 /*@
558 NEPRefineGetKSP - Obtain the `KSP` object used by the eigensolver
559 object in the refinement phase.
560
561 Collective
562
563 Input Parameter:
564 . nep - the nonlinear eigensolver context
565
566 Output Parameter:
567 . ksp - the linear solver context
568
569 Level: advanced
570
571 .seealso: [](ch:nep), `NEPSetRefine()`
572 @*/
573 1365 PetscErrorCode NEPRefineGetKSP(NEP nep,KSP *ksp)
574 {
575 1365 MPI_Comm comm;
576
577
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1365 PetscFunctionBegin;
578
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.
1365 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
579
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.
1365 PetscAssertPointer(ksp,2);
580
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1365 if (!nep->refineksp) {
581
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1325 if (nep->npart>1) {
582 /* Split in subcomunicators */
583
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.
80 PetscCall(PetscSubcommCreate(PetscObjectComm((PetscObject)nep),&nep->refinesubc));
584
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.
80 PetscCall(PetscSubcommSetNumber(nep->refinesubc,nep->npart));
585
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.
80 PetscCall(PetscSubcommSetType(nep->refinesubc,PETSC_SUBCOMM_CONTIGUOUS));
586
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.
80 PetscCall(PetscSubcommGetChild(nep->refinesubc,&comm));
587
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.
1245 } else PetscCall(PetscObjectGetComm((PetscObject)nep,&comm));
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.
1325 PetscCall(KSPCreate(comm,&nep->refineksp));
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.
1325 PetscCall(PetscObjectIncrementTabLevel((PetscObject)nep->refineksp,(PetscObject)nep,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.
1325 PetscCall(PetscObjectSetOptions((PetscObject)nep->refineksp,((PetscObject)nep)->options));
591
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.
1325 PetscCall(KSPSetOptionsPrefix(*ksp,((PetscObject)nep)->prefix));
592
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.
1325 PetscCall(KSPAppendOptionsPrefix(*ksp,"nep_refine_"));
593
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.
2634 PetscCall(KSPSetTolerances(nep->refineksp,SlepcDefaultTol(nep->rtol),PETSC_CURRENT,PETSC_CURRENT,PETSC_CURRENT));
594 }
595 1365 *ksp = nep->refineksp;
596
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.
1365 PetscFunctionReturn(PETSC_SUCCESS);
597 }
598
599 /*@
600 NEPSetTarget - Sets the value of the target.
601
602 Logically Collective
603
604 Input Parameters:
605 + nep - the nonlinear eigensolver context
606 - target - the value of the target
607
608 Options Database Key:
609 . -nep_target target - the value of the target
610
611 Notes:
612 The target is a scalar value used to determine the portion of the spectrum
613 of interest. It is used in combination with `NEPSetWhichEigenpairs()`.
614
615 When PETSc is built with real scalars, it is not possible to specify a
616 complex target.
617
618 In the case of complex scalars, a complex value can be provided in the
619 command line with `[+/-][realnumber][+/-]realnumberi` with no spaces, e.g.
620 `-nep_target 1.0+2.0i`.
621
622 Level: intermediate
623
624 .seealso: [](ch:nep), `NEPGetTarget()`, `NEPSetWhichEigenpairs()`
625 @*/
626 1055 PetscErrorCode NEPSetTarget(NEP nep,PetscScalar target)
627 {
628
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1055 PetscFunctionBegin;
629
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.
1055 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
630
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.
1055 PetscValidLogicalCollectiveScalar(nep,target,2);
631 1055 nep->target = target;
632
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.
1055 PetscFunctionReturn(PETSC_SUCCESS);
633 }
634
635 /*@
636 NEPGetTarget - Gets the value of the target.
637
638 Not Collective
639
640 Input Parameter:
641 . nep - the nonlinear eigensolver context
642
643 Output Parameter:
644 . target - the value of the target
645
646 Note:
647 If the target was not set by the user, then zero is returned.
648
649 Level: intermediate
650
651 .seealso: [](ch:nep), `NEPSetTarget()`
652 @*/
653 21 PetscErrorCode NEPGetTarget(NEP nep,PetscScalar* target)
654 {
655
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
21 PetscFunctionBegin;
656
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.
21 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
657
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.
21 PetscAssertPointer(target,2);
658 21 *target = nep->target;
659
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.
21 PetscFunctionReturn(PETSC_SUCCESS);
660 }
661
662 /*@C
663 NEPSetFunction - Sets the function to compute the nonlinear Function $T(\lambda)$
664 as well as the location to store the matrix.
665
666 Collective
667
668 Input Parameters:
669 + nep - the nonlinear eigensolver context
670 . F - Function matrix
671 . P - preconditioner matrix (usually the same as `F`)
672 . fun - Function evaluation routine (if `NULL` then `NEP` retains any
673 previously set value), see `NEPFunctionFn` for the calling sequence
674 - ctx - [optional] user-defined context for private data for the Function
675 evaluation routine (may be `NULL`) (if `NULL` then `NEP` retains any
676 previously set value)
677
678 Level: beginner
679
680 .seealso: [](ch:nep), `NEPGetFunction()`, `NEPSetJacobian()`
681 @*/
682 453 PetscErrorCode NEPSetFunction(NEP nep,Mat F,Mat P,NEPFunctionFn *fun,PetscCtx ctx)
683 {
684
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
453 PetscFunctionBegin;
685
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.
453 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
686
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.
453 if (F) PetscValidHeaderSpecific(F,MAT_CLASSID,2);
687
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.
453 if (P) PetscValidHeaderSpecific(P,MAT_CLASSID,3);
688
14/34
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
453 if (F) PetscCheckSameComm(nep,1,F,2);
689
14/34
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
453 if (P) PetscCheckSameComm(nep,1,P,3);
690
691
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.
453 if (nep->state) PetscCall(NEPReset(nep));
692
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.
398 else if (nep->fui && nep->fui!=NEP_USER_INTERFACE_CALLBACK) PetscCall(NEPReset_Problem(nep));
693
694
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
453 if (fun) nep->computefunction = fun;
695
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
453 if (ctx) nep->functionctx = ctx;
696
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
453 if (F) {
697
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.
453 PetscCall(PetscObjectReference((PetscObject)F));
698
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.
453 PetscCall(MatDestroy(&nep->function));
699 453 nep->function = F;
700 }
701
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
453 if (P) {
702
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.
453 PetscCall(PetscObjectReference((PetscObject)P));
703
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.
453 PetscCall(MatDestroy(&nep->function_pre));
704 453 nep->function_pre = P;
705 }
706 453 nep->fui = NEP_USER_INTERFACE_CALLBACK;
707 453 nep->state = NEP_STATE_INITIAL;
708
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.
453 PetscFunctionReturn(PETSC_SUCCESS);
709 }
710
711 /*@C
712 NEPGetFunction - Returns the Function matrix and optionally the user
713 provided context for evaluating the Function.
714
715 Collective
716
717 Input Parameter:
718 . nep - the nonlinear eigensolver context
719
720 Output Parameters:
721 + F - location to stash Function matrix (or `NULL`)
722 . P - location to stash preconditioner matrix (or `NULL`)
723 . fun - location to put Function function (or `NULL`)
724 - ctx - location to stash Function context (or `NULL`)
725
726 Level: advanced
727
728 .seealso: [](ch:nep), `NEPSetFunction()`
729 @*/
730 906 PetscErrorCode NEPGetFunction(NEP nep,Mat *F,Mat *P,NEPFunctionFn **fun,PetscCtxRt ctx)
731 {
732
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
906 PetscFunctionBegin;
733
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.
906 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
734
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
906 NEPCheckCallback(nep,1);
735
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
906 if (F) *F = nep->function;
736
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
906 if (P) *P = nep->function_pre;
737
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
906 if (fun) *fun = nep->computefunction;
738
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
906 if (ctx) *(void**)ctx = nep->functionctx;
739
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.
906 PetscFunctionReturn(PETSC_SUCCESS);
740 }
741
742 /*@C
743 NEPSetJacobian - Sets the function to compute the Jacobian $T'(\lambda)$ as well
744 as the location to store the matrix.
745
746 Collective
747
748 Input Parameters:
749 + nep - the nonlinear eigensolver context
750 . J - Jacobian matrix
751 . jac - Jacobian evaluation routine (if `NULL` then `NEP` retains any
752 previously set value), see `NEPJacobianFn` for the calling sequence
753 - ctx - [optional] user-defined context for private data for the Jacobian
754 evaluation routine (may be `NULL`) (if `NULL` then `NEP` retains any
755 previously set value)
756
757 Level: beginner
758
759 .seealso: [](ch:nep), `NEPSetFunction()`, `NEPGetJacobian()`
760 @*/
761 418 PetscErrorCode NEPSetJacobian(NEP nep,Mat J,NEPJacobianFn *jac,PetscCtx ctx)
762 {
763
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
418 PetscFunctionBegin;
764
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.
418 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
765
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.
418 if (J) PetscValidHeaderSpecific(J,MAT_CLASSID,2);
766
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.
418 if (J) PetscCheckSameComm(nep,1,J,2);
767
768
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.
418 if (nep->state) PetscCall(NEPReset(nep));
769
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.
418 else if (nep->fui && nep->fui!=NEP_USER_INTERFACE_CALLBACK) PetscCall(NEPReset_Problem(nep));
770
771
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
418 if (jac) nep->computejacobian = jac;
772
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
418 if (ctx) nep->jacobianctx = ctx;
773
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
418 if (J) {
774
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.
418 PetscCall(PetscObjectReference((PetscObject)J));
775
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.
418 PetscCall(MatDestroy(&nep->jacobian));
776 418 nep->jacobian = J;
777 }
778 418 nep->fui = NEP_USER_INTERFACE_CALLBACK;
779 418 nep->state = NEP_STATE_INITIAL;
780
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
418 PetscFunctionReturn(PETSC_SUCCESS);
781 }
782
783 /*@C
784 NEPGetJacobian - Returns the Jacobian matrix and optionally the user
785 provided routine and context for evaluating the Jacobian.
786
787 Collective
788
789 Input Parameter:
790 . nep - the nonlinear eigensolver context
791
792 Output Parameters:
793 + J - location to stash Jacobian matrix (or `NULL`)
794 . jac - location to put Jacobian function (or `NULL`)
795 - ctx - location to stash Jacobian context (or `NULL`)
796
797 Level: advanced
798
799 .seealso: [](ch:nep), `NEPSetJacobian()`
800 @*/
801 PetscErrorCode NEPGetJacobian(NEP nep,Mat *J,NEPJacobianFn **jac,PetscCtxRt ctx)
802 {
803 PetscFunctionBegin;
804 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
805 NEPCheckCallback(nep,1);
806 if (J) *J = nep->jacobian;
807 if (jac) *jac = nep->computejacobian;
808 if (ctx) *(void**)ctx = nep->jacobianctx;
809 PetscFunctionReturn(PETSC_SUCCESS);
810 }
811
812 /*@
813 NEPSetSplitOperator - Sets the operator of the nonlinear eigenvalue problem
814 in split form.
815
816 Collective
817
818 Input Parameters:
819 + nep - the nonlinear eigensolver context
820 . nt - number of terms in the split form
821 . A - array of matrices
822 . f - array of functions
823 - str - structure flag for matrices
824
825 Notes:
826 The nonlinear operator is written as $T(\lambda) = \sum_i A_i f_i(\lambda)$,
827 for $i=1,\dots,n$. The derivative $T'(\lambda)$ can be obtained using the
828 derivatives of $f_i$.
829
830 The structure flag provides information about $A_i$'s nonzero pattern
831 (see `MatStructure`). If all matrices have the same pattern, then
832 use `SAME_NONZERO_PATTERN`. If the patterns are different but contained
833 in the pattern of the first one, then use `SUBSET_NONZERO_PATTERN`. If
834 patterns are known to be different, use `DIFFERENT_NONZERO_PATTERN`.
835 If set to `UNKNOWN_NONZERO_PATTERN`, the patterns will be compared to
836 determine if they are equal.
837
838 This function must be called before `NEPSetUp()`. If it is called again
839 after `NEPSetUp()` then the `NEP` object is reset.
840
841 Level: beginner
842
843 .seealso: [](ch:nep), `NEPGetSplitOperatorTerm()`, `NEPGetSplitOperatorInfo()`, `NEPSetSplitPreconditioner()`
844 @*/
845 1058 PetscErrorCode NEPSetSplitOperator(NEP nep,PetscInt nt,Mat A[],FN f[],MatStructure str)
846 {
847 1058 PetscInt i,n=0,m,m0=0,mloc,nloc,mloc0=0;
848
849
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1058 PetscFunctionBegin;
850
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.
1058 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
851
27/62
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
1058 PetscValidLogicalCollectiveInt(nep,nt,2);
852
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1058 PetscCheck(nt>0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"Must have one or more terms, you have %" PetscInt_FMT,nt);
853
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.
207 PetscAssertPointer(A,3);
854
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.
207 PetscAssertPointer(f,4);
855
27/62
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
207 PetscValidLogicalCollectiveEnum(nep,str,5);
856
857
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4110 for (i=0;i<nt;i++) {
858
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.
3052 PetscValidHeaderSpecific(A[i],MAT_CLASSID,3);
859
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.
3052 PetscCheckSameComm(nep,1,A[i],3);
860
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.
3052 PetscValidHeaderSpecific(f[i],FN_CLASSID,4);
861
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.
3052 PetscCheckSameComm(nep,1,f[i],4);
862
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.
3052 PetscCall(MatGetSize(A[i],&m,&n));
863
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.
3052 PetscCall(MatGetLocalSize(A[i],&mloc,&nloc));
864
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
3052 PetscCheck(m==n,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_WRONG,"A[%" PetscInt_FMT "] is a non-square matrix (%" PetscInt_FMT " rows, %" PetscInt_FMT " cols)",i,m,n);
865
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
3052 PetscCheck(mloc==nloc,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_WRONG,"A[%" PetscInt_FMT "] does not have equal row and column local sizes (%" PetscInt_FMT ", %" PetscInt_FMT ")",i,mloc,nloc);
866
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
3052 if (!i) { m0 = m; mloc0 = mloc; }
867
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
3052 PetscCheck(m==m0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_INCOMP,"Dimensions of A[%" PetscInt_FMT "] do not match with previous matrices (%" PetscInt_FMT ", %" PetscInt_FMT ")",i,m,m0);
868
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
3052 PetscCheck(mloc==mloc0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_INCOMP,"Local dimensions of A[%" PetscInt_FMT "] do not match with previous matrices (%" PetscInt_FMT ", %" PetscInt_FMT ")",i,mloc,mloc0);
869
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.
3052 PetscCall(PetscObjectReference((PetscObject)A[i]));
870
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.
3052 PetscCall(PetscObjectReference((PetscObject)f[i]));
871 }
872
873
7/12
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
1058 if (nep->state && (n!=nep->n || nloc!=nep->nloc)) PetscCall(NEPReset(nep));
874
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.
913 else PetscCall(NEPReset_Problem(nep));
875
876 /* allocate space and copy matrices and functions */
877
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.
1058 PetscCall(PetscMalloc1(nt,&nep->A));
878
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4110 for (i=0;i<nt;i++) nep->A[i] = A[i];
879
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.
1058 PetscCall(PetscMalloc1(nt,&nep->f));
880
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4110 for (i=0;i<nt;i++) nep->f[i] = f[i];
881
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.
1058 PetscCall(PetscCalloc1(nt,&nep->nrma));
882 1058 nep->nt = nt;
883 1058 nep->mstr = str;
884 1058 nep->fui = NEP_USER_INTERFACE_SPLIT;
885 1058 nep->state = NEP_STATE_INITIAL;
886
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.
1058 PetscFunctionReturn(PETSC_SUCCESS);
887 }
888
889 /*@
890 NEPGetSplitOperatorTerm - Gets the matrices and functions associated with
891 the nonlinear operator in split form.
892
893 Collective
894
895 Input Parameters:
896 + nep - the nonlinear eigensolver context
897 - k - the index of the requested term (starting in 0)
898
899 Output Parameters:
900 + A - the matrix of the requested term
901 - f - the function of the requested term
902
903 Level: intermediate
904
905 .seealso: [](ch:nep), `NEPSetSplitOperator()`, `NEPGetSplitOperatorInfo()`
906 @*/
907 268 PetscErrorCode NEPGetSplitOperatorTerm(NEP nep,PetscInt k,Mat *A,FN *f)
908 {
909
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
268 PetscFunctionBegin;
910
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.
268 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
911
27/62
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
268 PetscValidLogicalCollectiveInt(nep,k,2);
912
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
268 NEPCheckSplit(nep,1);
913
2/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
268 PetscCheck(k>=0 && k<nep->nt,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"k must be between 0 and %" PetscInt_FMT,nep->nt-1);
914
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
268 if (A) *A = nep->A[k];
915
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
268 if (f) *f = nep->f[k];
916
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.
54 PetscFunctionReturn(PETSC_SUCCESS);
917 }
918
919 /*@
920 NEPGetSplitOperatorInfo - Returns the number of terms of the split form of
921 the nonlinear operator, as well as the structure flag for matrices.
922
923 Not Collective
924
925 Input Parameter:
926 . nep - the nonlinear eigensolver context
927
928 Output Parameters:
929 + n - the number of terms passed in `NEPSetSplitOperator()`
930 - str - the matrix structure flag passed in `NEPSetSplitOperator()`
931
932 Level: intermediate
933
934 .seealso: [](ch:nep), `NEPSetSplitOperator()`, `NEPGetSplitOperatorTerm()`
935 @*/
936 99 PetscErrorCode NEPGetSplitOperatorInfo(NEP nep,PetscInt *n,MatStructure *str)
937 {
938
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
99 PetscFunctionBegin;
939
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.
99 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
940
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
99 NEPCheckSplit(nep,1);
941
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
99 if (n) *n = nep->nt;
942
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
99 if (str) *str = nep->mstr;
943
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.
99 PetscFunctionReturn(PETSC_SUCCESS);
944 }
945
946 /*@
947 NEPSetSplitPreconditioner - Sets an operator in split form from which
948 to build the preconditioner to be used when solving the nonlinear
949 eigenvalue problem in split form.
950
951 Collective
952
953 Input Parameters:
954 + nep - the nonlinear eigensolver context
955 . ntp - number of terms in the split preconditioner
956 . P - array of matrices
957 - strp - structure flag for matrices
958
959 Notes:
960 The matrix for the preconditioner is expressed as $P(\lambda) =
961 \sum_i P_i f_i(\lambda)$, for $i=1,\dots,n$, where the $f_i$ functions
962 are the same as in `NEPSetSplitOperator()`. It is not necessary to call
963 this function. If it is not invoked, then the preconditioner is
964 built from $T(\lambda)$, i.e., both matrices and functions passed in
965 `NEPSetSplitOperator()`.
966
967 The structure flag provides information about $P_i$'s nonzero pattern
968 in the same way as in `NEPSetSplitOperator()`.
969
970 If the functions defining the preconditioner operator were different
971 from the ones given in `NEPSetSplitOperator()`, then the split form
972 cannot be used. Use the callback interface instead.
973
974 Use `ntp=0` to reset a previously set split preconditioner.
975
976 Level: advanced
977
978 .seealso: [](ch:nep), `NEPGetSplitPreconditionerTerm()`, `NEPGetSplitPreconditionerInfo()`, `NEPSetSplitOperator()`
979 @*/
980 55 PetscErrorCode NEPSetSplitPreconditioner(NEP nep,PetscInt ntp,Mat P[],MatStructure strp)
981 {
982 55 PetscInt i,n=0,m,m0=0,mloc,nloc,mloc0=0;
983
984
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
55 PetscFunctionBegin;
985
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.
55 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
986
27/62
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
55 PetscValidLogicalCollectiveInt(nep,ntp,2);
987
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
55 PetscCheck(ntp>=0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"Negative value of ntp = %" PetscInt_FMT,ntp);
988
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
55 PetscCheck(nep->fui==NEP_USER_INTERFACE_SPLIT,PetscObjectComm((PetscObject)nep),PETSC_ERR_ORDER,"Must call NEPSetSplitOperator first");
989
3/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
55 PetscCheck(ntp==0 || nep->nt==ntp,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"The number of terms must be the same as in NEPSetSplitOperator()");
990
3/10
✓ 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.
11 if (ntp) PetscAssertPointer(P,3);
991
27/62
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
11 PetscValidLogicalCollectiveEnum(nep,strp,4);
992
993
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
220 for (i=0;i<ntp;i++) {
994
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.
165 PetscValidHeaderSpecific(P[i],MAT_CLASSID,3);
995
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.
165 PetscCheckSameComm(nep,1,P[i],3);
996
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.
165 PetscCall(MatGetSize(P[i],&m,&n));
997
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.
165 PetscCall(MatGetLocalSize(P[i],&mloc,&nloc));
998
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
165 PetscCheck(m==n,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_WRONG,"P[%" PetscInt_FMT "] is a non-square matrix (%" PetscInt_FMT " rows, %" PetscInt_FMT " cols)",i,m,n);
999
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
165 PetscCheck(mloc==nloc,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_WRONG,"P[%" PetscInt_FMT "] does not have equal row and column local sizes (%" PetscInt_FMT ", %" PetscInt_FMT ")",i,mloc,nloc);
1000
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
165 if (!i) { m0 = m; mloc0 = mloc; }
1001
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
165 PetscCheck(m==m0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_INCOMP,"Dimensions of P[%" PetscInt_FMT "] do not match with previous matrices (%" PetscInt_FMT ", %" PetscInt_FMT ")",i,m,m0);
1002
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
165 PetscCheck(mloc==mloc0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_INCOMP,"Local dimensions of P[%" PetscInt_FMT "] do not match with previous matrices (%" PetscInt_FMT ", %" PetscInt_FMT ")",i,mloc,mloc0);
1003
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.
165 PetscCall(PetscObjectReference((PetscObject)P[i]));
1004 }
1005
1006
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
55 PetscCheck(!nep->state,PetscObjectComm((PetscObject)nep),PETSC_ERR_ORDER,"To call this function after NEPSetUp(), you must call NEPSetSplitOperator() again");
1007
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.
55 if (nep->P) PetscCall(MatDestroyMatrices(nep->nt,&nep->P));
1008
1009 /* allocate space and copy matrices */
1010
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
55 if (ntp) {
1011
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.
55 PetscCall(PetscMalloc1(ntp,&nep->P));
1012
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
220 for (i=0;i<ntp;i++) nep->P[i] = P[i];
1013 }
1014 55 nep->mstrp = strp;
1015 55 nep->state = NEP_STATE_INITIAL;
1016
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.
55 PetscFunctionReturn(PETSC_SUCCESS);
1017 }
1018
1019 /*@
1020 NEPGetSplitPreconditionerTerm - Gets the matrices associated with
1021 the split preconditioner.
1022
1023 Not Collective
1024
1025 Input Parameters:
1026 + nep - the nonlinear eigensolver context
1027 - k - the index of the requested term (starting in 0)
1028
1029 Output Parameter:
1030 . P - the matrix of the requested term
1031
1032 Level: advanced
1033
1034 .seealso: [](ch:nep), `NEPSetSplitPreconditioner()`, `NEPGetSplitPreconditionerInfo()`
1035 @*/
1036 55 PetscErrorCode NEPGetSplitPreconditionerTerm(NEP nep,PetscInt k,Mat *P)
1037 {
1038
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
55 PetscFunctionBegin;
1039
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.
55 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
1040
27/62
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
55 PetscValidLogicalCollectiveInt(nep,k,2);
1041
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.
55 PetscAssertPointer(P,3);
1042
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
55 NEPCheckSplit(nep,1);
1043
2/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
55 PetscCheck(k>=0 && k<nep->nt,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"k must be between 0 and %" PetscInt_FMT,nep->nt-1);
1044
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
55 PetscCheck(nep->P,PetscObjectComm((PetscObject)nep),PETSC_ERR_ORDER,"You have not called NEPSetSplitPreconditioner()");
1045 55 *P = nep->P[k];
1046
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.
55 PetscFunctionReturn(PETSC_SUCCESS);
1047 }
1048
1049 /*@
1050 NEPGetSplitPreconditionerInfo - Returns the number of terms of the split
1051 preconditioner, as well as the structure flag for matrices.
1052
1053 Not Collective
1054
1055 Input Parameter:
1056 . nep - the nonlinear eigensolver context
1057
1058 Output Parameters:
1059 + n - the number of terms passed in `NEPSetSplitPreconditioner()`
1060 - strp - the matrix structure flag passed in `NEPSetSplitPreconditioner()`
1061
1062 Level: advanced
1063
1064 .seealso: [](ch:nep), `NEPSetSplitPreconditioner()`, `NEPGetSplitPreconditionerTerm()`
1065 @*/
1066 55 PetscErrorCode NEPGetSplitPreconditionerInfo(NEP nep,PetscInt *n,MatStructure *strp)
1067 {
1068
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
55 PetscFunctionBegin;
1069
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.
55 PetscValidHeaderSpecific(nep,NEP_CLASSID,1);
1070
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
55 NEPCheckSplit(nep,1);
1071
2/4
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
55 if (n) *n = nep->P? nep->nt: 0;
1072
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
55 if (strp) *strp = nep->mstrp;
1073
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.
55 PetscFunctionReturn(PETSC_SUCCESS);
1074 }
1075