GCC Code Coverage Report


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