GCC Code Coverage Report


Directory: ./
File: src/nep/interface/nepbasic.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 371 397 93.5%
Functions: 24 27 88.9%
Branches: 1033 2564 40.3%

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