GCC Code Coverage Report


Directory: ./
File: src/eps/interface/epsopts.c
Date: 2026-02-22 03:58:10
Exec Total Coverage
Lines: 525 546 96.2%
Functions: 36 36 100.0%
Branches: 1656 3611 45.9%

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 EPS routines related to options that can be set via the command-line
12 or procedurally.
13 */
14
15 #include <slepc/private/epsimpl.h> /*I "slepceps.h" I*/
16 #include <petscdraw.h>
17
18 /*@C
19 EPSMonitorSetFromOptions - Sets a monitor function and viewer appropriate for the type
20 indicated by the user.
21
22 Collective
23
24 Input Parameters:
25 + eps - the linear eigensolver context
26 . opt - the command line option for this monitor
27 . name - the monitor type one is seeking
28 . ctx - an optional user context for the monitor, or `NULL`
29 - trackall - whether this monitor tracks all eigenvalues or not
30
31 Level: developer
32
33 .seealso: [](ch:eps), `EPSMonitorSet()`, `EPSSetTrackAll()`
34 @*/
35 15705 PetscErrorCode EPSMonitorSetFromOptions(EPS eps,const char opt[],const char name[],PetscCtx ctx,PetscBool trackall)
36 {
37 15705 PetscErrorCode (*mfunc)(EPS,PetscInt,PetscInt,PetscScalar*,PetscScalar*,PetscReal*,PetscInt,void*);
38 15705 PetscErrorCode (*cfunc)(PetscViewer,PetscViewerFormat,void*,PetscViewerAndFormat**);
39 15705 PetscErrorCode (*dfunc)(PetscViewerAndFormat**);
40 15705 PetscViewerAndFormat *vf;
41 15705 PetscViewer viewer;
42 15705 PetscViewerFormat format;
43 15705 PetscViewerType vtype;
44 15705 char key[PETSC_MAX_PATH_LEN];
45 15705 PetscBool flg;
46
47
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
15705 PetscFunctionBegin;
48
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
15705 PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)eps),((PetscObject)eps)->options,((PetscObject)eps)->prefix,opt,&viewer,&format,&flg));
49
8/14
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
15705 if (!flg) PetscFunctionReturn(PETSC_SUCCESS);
50
51
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
61 PetscCall(PetscViewerGetType(viewer,&vtype));
52
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
61 PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
53
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
61 PetscCall(PetscFunctionListFind(EPSMonitorList,key,&mfunc));
54
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
61 PetscCheck(mfunc,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Specified viewer and format not supported");
55
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
61 PetscCall(PetscFunctionListFind(EPSMonitorCreateList,key,&cfunc));
56
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
61 PetscCall(PetscFunctionListFind(EPSMonitorDestroyList,key,&dfunc));
57
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
61 if (!cfunc) cfunc = PetscViewerAndFormatCreate_Internal;
58
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
61 if (!dfunc) dfunc = PetscViewerAndFormatDestroy;
59
60
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
61 PetscCall((*cfunc)(viewer,format,ctx,&vf));
61
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
61 PetscCall(PetscViewerDestroy(&viewer));
62
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
61 PetscCall(EPSMonitorSet(eps,mfunc,vf,(PetscCtxDestroyFn*)dfunc));
63
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
61 if (trackall) PetscCall(EPSSetTrackAll(eps,PETSC_TRUE));
64
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
16 PetscFunctionReturn(PETSC_SUCCESS);
65 }
66
67 /*@
68 EPSSetFromOptions - Sets `EPS` options from the options database.
69 This routine must be called before `EPSSetUp()` if the user is to be
70 allowed to configure the solver.
71
72 Collective
73
74 Input Parameter:
75 . eps - the linear eigensolver context
76
77 Note:
78 To see all options, run your program with the `-help` option.
79
80 Level: beginner
81
82 .seealso: [](ch:eps), `EPSSetOptionsPrefix()`
83 @*/
84 5235 PetscErrorCode EPSSetFromOptions(EPS eps)
85 {
86 5235 char type[256];
87 5235 PetscBool set,flg,flg1,flg2,flg3,bval;
88 5235 PetscReal r,array[2]={0,0};
89 5235 PetscScalar s;
90 5235 PetscInt i,j,k;
91 5235 EPSBalance bal;
92
93
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
5235 PetscFunctionBegin;
94
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.
5235 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
95
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(EPSRegisterAll());
96
8/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
15705 PetscObjectOptionsBegin((PetscObject)eps);
97
7/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5747 PetscCall(PetscOptionsFList("-eps_type","Eigensolver method","EPSSetType",EPSList,(char*)(((PetscObject)eps)->type_name?((PetscObject)eps)->type_name:EPSKRYLOVSCHUR),type,sizeof(type),&flg));
98
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetType(eps,type));
99
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
3219 else if (!((PetscObject)eps)->type_name) PetscCall(EPSSetType(eps,EPSKRYLOVSCHUR));
100
101
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupBegin("-eps_hermitian","Hermitian eigenvalue problem","EPSSetProblemType",&flg));
102
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetProblemType(eps,EPS_HEP));
103
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_gen_hermitian","Generalized Hermitian eigenvalue problem","EPSSetProblemType",&flg));
104
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetProblemType(eps,EPS_GHEP));
105
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_non_hermitian","Non-Hermitian eigenvalue problem","EPSSetProblemType",&flg));
106
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetProblemType(eps,EPS_NHEP));
107
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_gen_non_hermitian","Generalized non-Hermitian eigenvalue problem","EPSSetProblemType",&flg));
108
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetProblemType(eps,EPS_GNHEP));
109
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_pos_gen_non_hermitian","Generalized non-Hermitian eigenvalue problem with positive semi-definite B","EPSSetProblemType",&flg));
110
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetProblemType(eps,EPS_PGNHEP));
111
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_gen_indefinite","Generalized Hermitian-indefinite eigenvalue problem","EPSSetProblemType",&flg));
112
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetProblemType(eps,EPS_GHIEP));
113
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_bse","Structured Bethe-Salpeter eigenvalue problem","EPSSetProblemType",&flg));
114
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetProblemType(eps,EPS_BSE));
115
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupEnd("-eps_hamiltonian","Structured Hamiltonian eigenvalue problem","EPSSetProblemType",&flg));
116
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetProblemType(eps,EPS_HAMILT));
117
118
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupBegin("-eps_ritz","Rayleigh-Ritz extraction","EPSSetExtraction",&flg));
119
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetExtraction(eps,EPS_RITZ));
120
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_harmonic","Harmonic Ritz extraction","EPSSetExtraction",&flg));
121
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC));
122
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_harmonic_relative","Relative harmonic Ritz extraction","EPSSetExtraction",&flg));
123
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_RELATIVE));
124
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_harmonic_right","Right harmonic Ritz extraction","EPSSetExtraction",&flg));
125
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_RIGHT));
126
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_harmonic_largest","Largest harmonic Ritz extraction","EPSSetExtraction",&flg));
127
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_LARGEST));
128
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_refined","Refined Ritz extraction","EPSSetExtraction",&flg));
129
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetExtraction(eps,EPS_REFINED));
130
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupEnd("-eps_refined_harmonic","Refined harmonic Ritz extraction","EPSSetExtraction",&flg));
131
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetExtraction(eps,EPS_REFINED_HARMONIC));
132
133 5235 bal = eps->balance;
134
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsEnum("-eps_balance","Balancing method","EPSSetBalance",EPSBalanceTypes,(PetscEnum)bal,(PetscEnum*)&bal,&flg1));
135 5235 j = eps->balance_its;
136
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsInt("-eps_balance_its","Number of iterations in balancing","EPSSetBalance",eps->balance_its,&j,&flg2));
137 5235 r = eps->balance_cutoff;
138
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsReal("-eps_balance_cutoff","Cutoff value in balancing","EPSSetBalance",eps->balance_cutoff,&r,&flg3));
139
8/12
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
5235 if (flg1 || flg2 || flg3) PetscCall(EPSSetBalance(eps,bal,j,r));
140
141 5235 i = eps->max_it;
142
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsInt("-eps_max_it","Maximum number of iterations","EPSSetTolerances",eps->max_it,&i,&flg1));
143 5235 r = eps->tol;
144
7/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
8855 PetscCall(PetscOptionsReal("-eps_tol","Tolerance","EPSSetTolerances",SlepcDefaultTol(eps->tol),&r,&flg2));
145
8/10
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
5235 if (flg1 || flg2) PetscCall(EPSSetTolerances(eps,r,i));
146
147 5235 r = eps->thres;
148
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsReal("-eps_threshold_absolute","Absolute threshold","EPSSetThreshold",r,&r,&flg));
149
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetThreshold(eps,r,PETSC_FALSE));
150
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsReal("-eps_threshold_relative","Relative threshold","EPSSetThreshold",r,&r,&flg));
151
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetThreshold(eps,r,PETSC_TRUE));
152
153
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupBegin("-eps_conv_rel","Relative error convergence test","EPSSetConvergenceTest",&flg));
154
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_REL));
155
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_conv_norm","Convergence test relative to the eigenvalue and the matrix norms","EPSSetConvergenceTest",&flg));
156
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_NORM));
157
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_conv_abs","Absolute error convergence test","EPSSetConvergenceTest",&flg));
158
6/8
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_ABS));
159
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupEnd("-eps_conv_user","User-defined convergence test","EPSSetConvergenceTest",&flg));
160
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_USER));
161
162
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupBegin("-eps_stop_basic","Stop iteration if all eigenvalues converged or max_it reached","EPSSetStoppingTest",&flg));
163
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_BASIC));
164
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_stop_threshold","Stop iteration if a converged eigenvalue is below/above the threshold","EPSSetStoppingTest",&flg));
165
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD));
166
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupEnd("-eps_stop_user","User-defined stopping test","EPSSetStoppingTest",&flg));
167
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_USER));
168
169 5235 i = eps->nev;
170
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsInt("-eps_nev","Number of eigenvalues to compute","EPSSetDimensions",eps->nev,&i,&flg1));
171
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
5235 if (!flg1) i = PETSC_CURRENT;
172 5235 j = eps->ncv;
173
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsInt("-eps_ncv","Number of basis vectors","EPSSetDimensions",eps->ncv,&j,&flg2));
174 5235 k = eps->mpd;
175
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsInt("-eps_mpd","Maximum dimension of projected problem","EPSSetDimensions",eps->mpd,&k,&flg3));
176
9/12
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
5235 if (flg1 || flg2 || flg3) PetscCall(EPSSetDimensions(eps,i,j,k));
177
178
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupBegin("-eps_largest_magnitude","Compute largest eigenvalues in magnitude","EPSSetWhichEigenpairs",&flg));
179
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_MAGNITUDE));
180
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_smallest_magnitude","Compute smallest eigenvalues in magnitude","EPSSetWhichEigenpairs",&flg));
181
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_MAGNITUDE));
182
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_largest_real","Compute eigenvalues with largest real parts","EPSSetWhichEigenpairs",&flg));
183
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_REAL));
184
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_smallest_real","Compute eigenvalues with smallest real parts","EPSSetWhichEigenpairs",&flg));
185
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_REAL));
186
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_largest_imaginary","Compute eigenvalues with largest imaginary parts","EPSSetWhichEigenpairs",&flg));
187
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_IMAGINARY));
188
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_smallest_imaginary","Compute eigenvalues with smallest imaginary parts","EPSSetWhichEigenpairs",&flg));
189
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_IMAGINARY));
190
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_target_magnitude","Compute eigenvalues closest to target","EPSSetWhichEigenpairs",&flg));
191
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_MAGNITUDE));
192
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_target_real","Compute eigenvalues with real parts closest to target","EPSSetWhichEigenpairs",&flg));
193
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_REAL));
194
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_target_imaginary","Compute eigenvalues with imaginary parts closest to target","EPSSetWhichEigenpairs",&flg));
195
6/8
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 3 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_IMAGINARY));
196
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroup("-eps_all","Compute all eigenvalues in an interval or a region","EPSSetWhichEigenpairs",&flg));
197
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_ALL));
198
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBoolGroupEnd("-eps_which_user","Select the user-defined selection criterion","EPSSetWhichEigenpairs",&flg));
199
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
5235 if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_WHICH_USER));
200
201
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsScalar("-eps_target","Value of the target","EPSSetTarget",eps->target,&s,&flg));
202
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
5235 if (flg) {
203
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
350 if (eps->which!=EPS_TARGET_REAL && eps->which!=EPS_TARGET_IMAGINARY) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_MAGNITUDE));
204
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
350 PetscCall(EPSSetTarget(eps,s));
205 }
206
207 5235 k = 2;
208
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsRealArray("-eps_interval","Computational interval (two real values separated with a comma without spaces)","EPSSetInterval",array,&k,&flg));
209
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
5235 if (flg) {
210
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
153 PetscCheck(k>1,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_SIZ,"Must pass two values in -eps_interval (comma-separated without spaces)");
211
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSetWhichEigenpairs(eps,EPS_ALL));
212
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSetInterval(eps,array[0],array[1]));
213 }
214
215
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBool("-eps_true_residual","Compute true residuals explicitly","EPSSetTrueResidual",eps->trueres,&eps->trueres,NULL));
216
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBool("-eps_purify","Postprocess eigenvectors for purification","EPSSetPurify",eps->purify,&bval,&flg));
217
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetPurify(eps,bval));
218
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBool("-eps_two_sided","Use two-sided variant (to compute left eigenvectors)","EPSSetTwoSided",eps->twosided,&bval,&flg));
219
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (flg) PetscCall(EPSSetTwoSided(eps,bval));
220
221 /* -----------------------------------------------------------------------*/
222 /*
223 Cancels all monitors hardwired into code before call to EPSSetFromOptions()
224 */
225
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsBool("-eps_monitor_cancel","Remove any hardwired monitor routines","EPSMonitorCancel",PETSC_FALSE,&flg,&set));
226
1/10
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
5235 if (set && flg) PetscCall(EPSMonitorCancel(eps));
227
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor","first_approximation",NULL,PETSC_FALSE));
228
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor_all","all_approximations",NULL,PETSC_TRUE));
229
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor_conv","convergence_history",NULL,PETSC_FALSE));
230
231 /* -----------------------------------------------------------------------*/
232
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsName("-eps_view","Print detailed information on solver used","EPSView",&set));
233
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsName("-eps_view_vectors","View computed eigenvectors","EPSVectorsView",&set));
234
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsName("-eps_view_values","View computed eigenvalues","EPSValuesView",&set));
235
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsName("-eps_converged_reason","Print reason for convergence, and number of iterations","EPSConvergedReasonView",&set));
236
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsName("-eps_error_absolute","Print absolute errors of each eigenpair","EPSErrorView",&set));
237
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsName("-eps_error_relative","Print relative errors of each eigenpair","EPSErrorView",&set));
238
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscOptionsName("-eps_error_backward","Print backward errors of each eigenpair","EPSErrorView",&set));
239
240
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 PetscTryTypeMethod(eps,setfromoptions,PetscOptionsObject);
241
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)eps,PetscOptionsObject));
242
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscOptionsEnd();
243
244
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V));
245
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(BVSetFromOptions(eps->V));
246
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg));
247
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(RGSetFromOptions(eps->rg));
248
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
5235 if (eps->useds) {
249
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
4805 if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds));
250
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4805 PetscCall(EPSSetDSType(eps));
251
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4805 PetscCall(DSSetFromOptions(eps->ds));
252 }
253
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
5235 if (!eps->st) PetscCall(EPSGetST(eps,&eps->st));
254
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(EPSSetDefaultST(eps));
255
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
5235 PetscCall(STSetFromOptions(eps->st));
256
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.
1278 PetscFunctionReturn(PETSC_SUCCESS);
257 }
258
259 /*@
260 EPSGetTolerances - Gets the tolerance and maximum iteration count used
261 by the `EPS` convergence tests.
262
263 Not Collective
264
265 Input Parameter:
266 . eps - the linear eigensolver context
267
268 Output Parameters:
269 + tol - the convergence tolerance
270 - maxits - maximum number of iterations
271
272 Notes:
273 The user can specify `NULL` for any parameter that is not needed.
274
275 Level: intermediate
276
277 .seealso: [](ch:eps), `EPSSetTolerances()`
278 @*/
279 2254 PetscErrorCode EPSGetTolerances(EPS eps,PetscReal *tol,PetscInt *maxits)
280 {
281
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2254 PetscFunctionBegin;
282
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.
2254 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
283
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2254 if (tol) *tol = eps->tol;
284
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2254 if (maxits) *maxits = eps->max_it;
285
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.
2254 PetscFunctionReturn(PETSC_SUCCESS);
286 }
287
288 /*@
289 EPSSetTolerances - Sets the tolerance and maximum iteration count used
290 by the `EPS` convergence tests.
291
292 Logically Collective
293
294 Input Parameters:
295 + eps - the linear eigensolver context
296 . tol - the convergence tolerance
297 - maxits - maximum number of iterations to use
298
299 Options Database Keys:
300 + -eps_tol \<tol\> - sets the convergence tolerance
301 - -eps_max_it \<maxits\> - sets the maximum number of iterations allowed
302
303 Note:
304 Use `PETSC_CURRENT` to retain the current value of any of the parameters.
305 Use `PETSC_DETERMINE` for either argument to assign a default value computed
306 internally (may be different in each solver).
307 For `maxits` use `PETSC_UNLIMITED` to indicate there is no upper bound on this value.
308
309 Level: intermediate
310
311 .seealso: [](ch:eps), `EPSGetTolerances()`
312 @*/
313 4473 PetscErrorCode EPSSetTolerances(EPS eps,PetscReal tol,PetscInt maxits)
314 {
315
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
4473 PetscFunctionBegin;
316
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.
4473 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
317
29/66
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
4473 PetscValidLogicalCollectiveReal(eps,tol,2);
318
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.
4473 PetscValidLogicalCollectiveInt(eps,maxits,3);
319
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4473 if (tol == (PetscReal)PETSC_DETERMINE) {
320 117 eps->tol = PETSC_DETERMINE;
321 117 eps->state = EPS_STATE_INITIAL;
322
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
4356 } else if (tol != (PetscReal)PETSC_CURRENT) {
323
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
4356 PetscCheck(tol>0.0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of tol. Must be > 0");
324 4356 eps->tol = tol;
325 }
326
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4473 if (maxits == PETSC_DETERMINE) {
327 1166 eps->max_it = PETSC_DETERMINE;
328 1166 eps->state = EPS_STATE_INITIAL;
329
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
3307 } else if (maxits == PETSC_UNLIMITED) {
330 eps->max_it = PETSC_INT_MAX;
331
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3307 } else if (maxits != PETSC_CURRENT) {
332
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1702 PetscCheck(maxits>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of maxits. Must be > 0");
333 1702 eps->max_it = maxits;
334 }
335
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.
1107 PetscFunctionReturn(PETSC_SUCCESS);
336 }
337
338 /*@
339 EPSGetDimensions - Gets the number of eigenvalues to compute
340 and the dimension of the subspace.
341
342 Not Collective
343
344 Input Parameter:
345 . eps - the linear eigensolver context
346
347 Output Parameters:
348 + nev - number of eigenvalues to compute
349 . ncv - the maximum dimension of the subspace to be used by the solver
350 - mpd - the maximum dimension allowed for the projected problem
351
352 Level: intermediate
353
354 .seealso: [](ch:eps), `EPSSetDimensions()`
355 @*/
356 3746 PetscErrorCode EPSGetDimensions(EPS eps,PetscInt *nev,PetscInt *ncv,PetscInt *mpd)
357 {
358
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
3746 PetscFunctionBegin;
359
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.
3746 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
360
4/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
5510 if (nev) *nev = eps->nev? eps->nev: 1;
361
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3746 if (ncv) *ncv = eps->ncv;
362
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3746 if (mpd) *mpd = eps->mpd;
363
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.
3746 PetscFunctionReturn(PETSC_SUCCESS);
364 }
365
366 /*@
367 EPSSetDimensions - Sets the number of eigenvalues to compute
368 and the dimension of the subspace.
369
370 Logically Collective
371
372 Input Parameters:
373 + eps - the linear eigensolver context
374 . nev - number of eigenvalues to compute
375 . ncv - the maximum dimension of the subspace to be used by the solver
376 - mpd - the maximum dimension allowed for the projected problem
377
378 Options Database Keys:
379 + -eps_nev \<nev\> - sets the number of eigenvalues
380 . -eps_ncv \<ncv\> - sets the dimension of the subspace
381 - -eps_mpd \<mpd\> - sets the maximum projected dimension
382
383 Notes:
384 Use `PETSC_DETERMINE` for `ncv` and `mpd` to assign a reasonably good value, which is
385 dependent on the solution method. For any of the arguments, use `PETSC_CURRENT`
386 to preserve the current value.
387
388 The parameters `ncv` and `mpd` are intimately related, so that the user is advised
389 to set one of them at most. Normal usage is\:
390
391 1. In cases where `nev` is small, the user sets `ncv` (a reasonable default is `2*nev`).
392 2. In cases where `nev` is large, the user sets `mpd`.
393
394 The value of `ncv` should always be between `nev` and `(nev+mpd)`, typically
395 `ncv=nev+mpd`. If `nev` is not too large, `mpd=nev` is a reasonable choice, otherwise
396 a smaller value should be used.
397
398 When computing all eigenvalues in an interval, see `EPSSetInterval()`, these
399 parameters lose relevance, and tuning must be done with
400 `EPSKrylovSchurSetDimensions()`.
401
402 Level: intermediate
403
404 .seealso: [](ch:eps), `EPSGetDimensions()`, `EPSSetInterval()`, `EPSKrylovSchurSetDimensions()`
405 @*/
406 4926 PetscErrorCode EPSSetDimensions(EPS eps,PetscInt nev,PetscInt ncv,PetscInt mpd)
407 {
408
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
4926 PetscFunctionBegin;
409
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.
4926 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
410
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.
4926 PetscValidLogicalCollectiveInt(eps,nev,2);
411
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.
4926 PetscValidLogicalCollectiveInt(eps,ncv,3);
412
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.
4926 PetscValidLogicalCollectiveInt(eps,mpd,4);
413
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4926 if (nev != PETSC_CURRENT) {
414
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
4722 PetscCheck(nev>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of nev. Must be > 0");
415 4722 eps->nev = nev;
416 }
417
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4926 if (ncv == PETSC_DETERMINE) {
418 3072 eps->ncv = PETSC_DETERMINE;
419
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
1854 } else if (ncv != PETSC_CURRENT) {
420
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1824 PetscCheck(ncv>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of ncv. Must be > 0");
421 1824 eps->ncv = ncv;
422 }
423
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4926 if (mpd == PETSC_DETERMINE) {
424 4463 eps->mpd = PETSC_DETERMINE;
425
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
463 } else if (mpd != PETSC_CURRENT) {
426
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
427 PetscCheck(mpd>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of mpd. Must be > 0");
427 427 eps->mpd = mpd;
428 }
429 4926 eps->state = EPS_STATE_INITIAL;
430
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
4926 PetscFunctionReturn(PETSC_SUCCESS);
431 }
432
433 /*@
434 EPSSetWhichEigenpairs - Specifies which portion of the spectrum is
435 to be sought.
436
437 Logically Collective
438
439 Input Parameters:
440 + eps - the linear eigensolver context
441 - which - the portion of the spectrum to be sought, see `EPSWhich` for possible values
442
443 Options Database Keys:
444 + -eps_largest_magnitude - sets largest eigenvalues in magnitude
445 . -eps_smallest_magnitude - sets smallest eigenvalues in magnitude
446 . -eps_largest_real - sets largest real parts
447 . -eps_smallest_real - sets smallest real parts
448 . -eps_largest_imaginary - sets largest imaginary parts
449 . -eps_smallest_imaginary - sets smallest imaginary parts
450 . -eps_target_magnitude - sets eigenvalues closest to target
451 . -eps_target_real - sets real parts closest to target
452 . -eps_target_imaginary - sets imaginary parts closest to target
453 . -eps_all - sets all eigenvalues in an interval or region
454 - -eps_which_user - select the user-defined selection criterion
455
456 Notes:
457 Not all eigensolvers implemented in `EPS` account for all the possible values
458 of `which`. Also, some values make sense only for certain types of
459 problems. If SLEPc is compiled for real numbers `EPS_LARGEST_IMAGINARY`
460 and `EPS_SMALLEST_IMAGINARY` use the absolute value of the imaginary part
461 for eigenvalue selection.
462
463 The target is a scalar value provided with `EPSSetTarget()`.
464
465 The criterion `EPS_TARGET_IMAGINARY` is available only in case PETSc and
466 SLEPc have been built with complex scalars.
467
468 `EPS_ALL` is intended for use in combination with an interval (see
469 `EPSSetInterval()`), when all eigenvalues within the interval are requested,
470 or in the context of the `EPSCISS` solver for computing all eigenvalues in a region.
471
472 Level: intermediate
473
474 .seealso: [](ch:eps), `EPSGetWhichEigenpairs()`, `EPSSetTarget()`, `EPSSetInterval()`, `EPSSetDimensions()`, `EPSSetEigenvalueComparison()`, `EPSWhich`
475 @*/
476 5323 PetscErrorCode EPSSetWhichEigenpairs(EPS eps,EPSWhich which)
477 {
478
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
5323 PetscFunctionBegin;
479
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.
5323 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
480
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.
5323 PetscValidLogicalCollectiveEnum(eps,which,2);
481
1/3
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
5323 switch (which) {
482 5323 case EPS_LARGEST_MAGNITUDE:
483 case EPS_SMALLEST_MAGNITUDE:
484 case EPS_LARGEST_REAL:
485 case EPS_SMALLEST_REAL:
486 case EPS_LARGEST_IMAGINARY:
487 case EPS_SMALLEST_IMAGINARY:
488 case EPS_TARGET_MAGNITUDE:
489 case EPS_TARGET_REAL:
490 #if defined(PETSC_USE_COMPLEX)
491 case EPS_TARGET_IMAGINARY:
492 #endif
493 case EPS_ALL:
494 case EPS_WHICH_USER:
495
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
5323 if (eps->which != which) {
496 4539 eps->state = EPS_STATE_INITIAL;
497 4539 eps->which = which;
498 }
499 1324 break;
500 #if !defined(PETSC_USE_COMPLEX)
501 case EPS_TARGET_IMAGINARY:
502 SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"EPS_TARGET_IMAGINARY can be used only with complex scalars");
503 #endif
504 default:
505 SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'which' value");
506 }
507
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.
1324 PetscFunctionReturn(PETSC_SUCCESS);
508 }
509
510 /*@
511 EPSGetWhichEigenpairs - Returns which portion of the spectrum is to be
512 sought.
513
514 Not Collective
515
516 Input Parameter:
517 . eps - the linear eigensolver context
518
519 Output Parameter:
520 . which - the portion of the spectrum to be sought, see `EPSWhich` for possible values
521
522 Level: intermediate
523
524 .seealso: [](ch:eps), `EPSSetWhichEigenpairs()`, `EPSWhich`
525 @*/
526 13 PetscErrorCode EPSGetWhichEigenpairs(EPS eps,EPSWhich *which)
527 {
528
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13 PetscFunctionBegin;
529
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.
13 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
530
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.
13 PetscAssertPointer(which,2);
531 13 *which = eps->which;
532
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.
13 PetscFunctionReturn(PETSC_SUCCESS);
533 }
534
535 /*@
536 EPSSetThreshold - Sets the threshold used in the threshold stopping test.
537
538 Logically Collective
539
540 Input Parameters:
541 + eps - the linear eigensolver context
542 . thres - the threshold value
543 - rel - whether the threshold is relative or not
544
545 Options Database Keys:
546 + -eps_threshold_absolute \<thres\> - sets an absolute threshold
547 - -eps_threshold_relative \<thres\> - sets a relative threshold
548
549 Notes:
550 This function internally calls `EPSSetStoppingTest()` to set a special stopping
551 test based on the threshold, where eigenvalues are computed in sequence until
552 one of the computed eigenvalues is below the threshold `thres` (in magnitude).
553 This is the interpretation in case of searching for largest eigenvalues in magnitude,
554 see `EPSSetWhichEigenpairs()`.
555
556 If the solver is configured to compute smallest magnitude eigenvalues, then the
557 threshold must be interpreted in the opposite direction, i.e., the computation
558 will stop when one of the computed values is above the threshold (in magnitude).
559
560 The threshold can also be used when computing largest/smallest real eigenvalues
561 (i.e, rightmost or leftmost), in which case the threshold is allowed to be
562 negative. The solver will stop when one of the computed eigenvalues is above
563 or below the threshold (considering the real part of the eigenvalue). This mode
564 is allowed only in problem types whose eigenvalues are always real (e.g., `EPS_HEP`).
565
566 In the case of largest magnitude eigenvalues, the threshold can be made relative
567 with respect to the dominant eigenvalue. Otherwise, the argument `rel` should be
568 `PETSC_FALSE`.
569
570 An additional use case is with target magnitude selection of eigenvalues (e.g.,
571 with shift-and-invert), but this must be used with caution to avoid unexpected
572 behavior. With an absolute threshold, the solver will assume that leftmost
573 eigenvalues are being computed (e.g., with `target`=0 for a problem with real
574 positive eigenvalues). In case of a relative threshold, a value of `thres`<1
575 implies that the wanted eigenvalues are the largest ones, and otherwise the
576 solver assumes that smallest eigenvalues are being computed.
577
578 The test against the threshold is done for converged eigenvalues, which
579 implies that the final number of converged eigenvalues will be at least
580 one more than the actual number of values below/above the threshold.
581
582 Since the number of computed eigenvalues is not known a priori, the solver
583 will need to reallocate the basis of vectors internally, to have enough room
584 to accommodate all the eigenvectors. Hence, this option must be used with
585 caution to avoid out-of-memory problems. The recommendation is to set the value
586 of `ncv` to be larger than the estimated number of eigenvalues, to minimize the
587 number of reallocations.
588
589 If a number of wanted eigenvalues has been set with `EPSSetDimensions()`
590 it is also taken into account and the solver will stop when one of the two
591 conditions (threshold or number of converged values) is met.
592
593 Use `EPSSetStoppingTest()` to return to the usual computation of a fixed number
594 of eigenvalues.
595
596 Level: advanced
597
598 .seealso: [](ch:eps), `EPSGetThreshold()`, `EPSSetStoppingTest()`, `EPSSetDimensions()`, `EPSSetWhichEigenpairs()`, `EPSSetProblemType()`
599 @*/
600 120 PetscErrorCode EPSSetThreshold(EPS eps,PetscReal thres,PetscBool rel)
601 {
602
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
120 PetscFunctionBegin;
603
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.
120 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
604
29/66
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
120 PetscValidLogicalCollectiveReal(eps,thres,2);
605
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.
120 PetscValidLogicalCollectiveBool(eps,rel,3);
606
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
120 if (eps->thres != thres || eps->threlative != rel) {
607 120 eps->thres = thres;
608 120 eps->threlative = rel;
609 120 eps->state = EPS_STATE_INITIAL;
610
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
120 PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD));
611 }
612
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.
34 PetscFunctionReturn(PETSC_SUCCESS);
613 }
614
615 /*@
616 EPSGetThreshold - Gets the threshold used by the threshold stopping test.
617
618 Not Collective
619
620 Input Parameter:
621 . eps - the linear eigensolver context
622
623 Output Parameters:
624 + thres - the threshold
625 - rel - whether the threshold is relative or not
626
627 Level: advanced
628
629 .seealso: [](ch:eps), `EPSSetThreshold()`
630 @*/
631 40 PetscErrorCode EPSGetThreshold(EPS eps,PetscReal *thres,PetscBool *rel)
632 {
633
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
40 PetscFunctionBegin;
634
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
40 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
635
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
40 if (thres) *thres = eps->thres;
636
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
40 if (rel) *rel = eps->threlative;
637
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
40 PetscFunctionReturn(PETSC_SUCCESS);
638 }
639
640 /*@C
641 EPSSetEigenvalueComparison - Specifies the eigenvalue comparison function
642 when `EPSSetWhichEigenpairs()` is set to `EPS_WHICH_USER`.
643
644 Logically Collective
645
646 Input Parameters:
647 + eps - the linear eigensolver context
648 . func - the comparison function, see `SlepcEigenvalueComparisonFn` for the calling sequence
649 - ctx - a context pointer (the last parameter to the comparison function)
650
651 Level: advanced
652
653 .seealso: [](ch:eps), `EPSSetWhichEigenpairs()`, `EPSWhich`
654 @*/
655 308 PetscErrorCode EPSSetEigenvalueComparison(EPS eps,SlepcEigenvalueComparisonFn *func,PetscCtx ctx)
656 {
657
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
308 PetscFunctionBegin;
658
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.
308 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
659 308 eps->sc->comparison = func;
660 308 eps->sc->comparisonctx = ctx;
661 308 eps->which = EPS_WHICH_USER;
662
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.
308 PetscFunctionReturn(PETSC_SUCCESS);
663 }
664
665 /*@C
666 EPSSetArbitrarySelection - Specifies a function intended to look for
667 eigenvalues according to an arbitrary selection criterion. This criterion
668 can be based on a computation involving the current eigenvector approximation.
669
670 Logically Collective
671
672 Input Parameters:
673 + eps - the linear eigensolver context
674 . func - the arbitrary selection function, see `SlepcArbitrarySelectionFn` for a calling sequence
675 - ctx - a context pointer (the last parameter to the arbitrary selection function)
676
677 Notes:
678 This provides a mechanism to select eigenpairs by evaluating a user-defined
679 function. When a function has been provided, the default selection based on
680 sorting the eigenvalues is replaced by the sorting of the results of this
681 function (with the same sorting criterion given in `EPSSetWhichEigenpairs()`).
682
683 For instance, suppose you want to compute those eigenvectors that maximize
684 a certain computable expression. Then implement the computation using
685 the arguments `xr` and `xi`, and return the result in `rr`. Then set the standard
686 sorting by magnitude so that the eigenpair with largest value of `rr` is
687 selected.
688
689 This evaluation function is collective, that is, all processes call it and
690 it can use collective operations; furthermore, the computed result must
691 be the same in all processes.
692
693 The result of `func` is expressed as a complex number so that it is possible to
694 use the standard eigenvalue sorting functions, but normally only `rr` is used.
695 Set `ri` to zero unless it is meaningful in your application.
696
697 Level: advanced
698
699 .seealso: [](ch:eps), `EPSSetWhichEigenpairs()`, `EPSSetArbitrarySelectionContextDestroy()`
700 @*/
701 66 PetscErrorCode EPSSetArbitrarySelection(EPS eps,SlepcArbitrarySelectionFn *func,PetscCtx ctx)
702 {
703
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
66 PetscFunctionBegin;
704
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.
66 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
705
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
66 if (eps->arbitrarydestroy) PetscCall((*eps->arbitrarydestroy)(&eps->arbitraryctx));
706 66 eps->arbitrary = func;
707 66 eps->arbitraryctx = ctx;
708 66 eps->state = EPS_STATE_INITIAL;
709
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.
66 PetscFunctionReturn(PETSC_SUCCESS);
710 }
711
712 /*@C
713 EPSSetArbitrarySelectionContextDestroy - Set a context destroy function for the
714 context used in the arbitrary selection.
715
716 Logically Collective
717
718 Input Parameters:
719 + eps - the linear eigensolver context
720 - destroy - context destroy function, see `PetscCtxDestroyFn` for its calling sequence
721
722 Level: advanced
723
724 .seealso: [](ch:eps), `EPSSetArbitrarySelection()`
725 @*/
726 64 PetscErrorCode EPSSetArbitrarySelectionContextDestroy(EPS eps,PetscCtxDestroyFn *destroy)
727 {
728
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
64 PetscFunctionBegin;
729
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
64 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
730 64 eps->arbitrarydestroy = destroy;
731
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.
64 PetscFunctionReturn(PETSC_SUCCESS);
732 }
733
734 /*@C
735 EPSSetConvergenceTestFunction - Sets a function to compute the error estimate
736 used in the convergence test.
737
738 Logically Collective
739
740 Input Parameters:
741 + eps - the linear eigensolver context
742 . func - convergence test function, see `EPSConvergenceTestFn` for the calling sequence
743 . ctx - context for private data for the convergence routine (may be `NULL`)
744 - destroy - a routine for destroying the context (may be `NULL`), see `PetscCtxDestroyFn`
745 for the calling sequence
746
747 Notes:
748 When this is called with a user-defined function, then the convergence
749 criterion is set to `EPS_CONV_USER`, see `EPSSetConvergenceTest()`.
750
751 If the error estimate returned by the convergence test function is less than
752 the tolerance, then the eigenvalue is accepted as converged.
753
754 Level: advanced
755
756 .seealso: [](ch:eps), `EPSSetConvergenceTest()`, `EPSSetTolerances()`
757 @*/
758 311 PetscErrorCode EPSSetConvergenceTestFunction(EPS eps,EPSConvergenceTestFn *func,PetscCtx ctx,PetscCtxDestroyFn *destroy)
759 {
760
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
311 PetscFunctionBegin;
761
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.
311 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
762
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
311 if (eps->convergeddestroy) PetscCall((*eps->convergeddestroy)(&eps->convergedctx));
763 311 eps->convergeduser = func;
764 311 eps->convergeddestroy = destroy;
765 311 eps->convergedctx = ctx;
766
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
311 if (func == EPSConvergedRelative) eps->conv = EPS_CONV_REL;
767
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
311 else if (func == EPSConvergedNorm) eps->conv = EPS_CONV_NORM;
768
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
311 else if (func == EPSConvergedAbsolute) eps->conv = EPS_CONV_ABS;
769 else {
770 311 eps->conv = EPS_CONV_USER;
771 311 eps->converged = eps->convergeduser;
772 }
773
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.
73 PetscFunctionReturn(PETSC_SUCCESS);
774 }
775
776 /*@
777 EPSSetConvergenceTest - Specifies how to compute the error estimate
778 used in the convergence test.
779
780 Logically Collective
781
782 Input Parameters:
783 + eps - the linear eigensolver context
784 - conv - the type of convergence test, see `EPSConv` for possible values
785
786 Options Database Keys:
787 + -eps_conv_abs - sets the absolute convergence test
788 . -eps_conv_rel - sets the convergence test relative to the eigenvalue
789 . -eps_conv_norm - sets the convergence test relative to the matrix norms
790 - -eps_conv_user - selects the user-defined convergence test
791
792 Level: intermediate
793
794 .seealso: [](ch:eps), `EPSGetConvergenceTest()`, `EPSSetConvergenceTestFunction()`, `EPSSetStoppingTest()`, `EPSConv`
795 @*/
796 1372 PetscErrorCode EPSSetConvergenceTest(EPS eps,EPSConv conv)
797 {
798
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1372 PetscFunctionBegin;
799
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.
1372 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
800
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.
1372 PetscValidLogicalCollectiveEnum(eps,conv,2);
801
3/5
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
1372 switch (conv) {
802 221 case EPS_CONV_ABS: eps->converged = EPSConvergedAbsolute; break;
803 713 case EPS_CONV_REL: eps->converged = EPSConvergedRelative; break;
804 438 case EPS_CONV_NORM: eps->converged = EPSConvergedNorm; break;
805 case EPS_CONV_USER:
806 PetscCheck(eps->convergeduser,PetscObjectComm((PetscObject)eps),PETSC_ERR_ORDER,"Must call EPSSetConvergenceTestFunction() first");
807 eps->converged = eps->convergeduser;
808 break;
809 default:
810 SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'conv' value");
811 }
812 1372 eps->conv = conv;
813
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.
1372 PetscFunctionReturn(PETSC_SUCCESS);
814 }
815
816 /*@
817 EPSGetConvergenceTest - Gets the method used to compute the error estimate
818 used in the convergence test.
819
820 Not Collective
821
822 Input Parameter:
823 . eps - the linear eigensolver context
824
825 Output Parameter:
826 . conv - the type of convergence test
827
828 Level: intermediate
829
830 .seealso: [](ch:eps), `EPSSetConvergenceTest()`, `EPSConv`
831 @*/
832 13 PetscErrorCode EPSGetConvergenceTest(EPS eps,EPSConv *conv)
833 {
834
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13 PetscFunctionBegin;
835
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.
13 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
836
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.
13 PetscAssertPointer(conv,2);
837 13 *conv = eps->conv;
838
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.
13 PetscFunctionReturn(PETSC_SUCCESS);
839 }
840
841 /*@C
842 EPSSetStoppingTestFunction - Sets a function to decide when to stop the outer
843 iteration of the eigensolver.
844
845 Logically Collective
846
847 Input Parameters:
848 + eps - the linear eigensolver context
849 . func - stopping test function, see `EPSStoppingTestFn` for the calling sequence
850 . ctx - context for private data for the stopping routine (may be `NULL`)
851 - destroy - a routine for destroying the context (may be `NULL`), see `PetscCtxDestroyFn`
852 for the calling sequence
853
854 Note:
855 When implementing a function for this, normal usage is to first call the
856 default routine `EPSStoppingBasic()` and then set `reason` to `EPS_CONVERGED_USER`
857 if some user-defined conditions have been met. To let the eigensolver continue
858 iterating, the result must be left as `EPS_CONVERGED_ITERATING`.
859
860 Level: advanced
861
862 .seealso: [](ch:eps), `EPSSetStoppingTest()`, `EPSStoppingBasic()`
863 @*/
864 136 PetscErrorCode EPSSetStoppingTestFunction(EPS eps,EPSStoppingTestFn *func,PetscCtx ctx,PetscCtxDestroyFn *destroy)
865 {
866
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
136 PetscFunctionBegin;
867
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.
136 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
868
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
136 if (eps->stoppingdestroy) PetscCall((*eps->stoppingdestroy)(&eps->stoppingctx));
869 136 eps->stoppinguser = func;
870 136 eps->stoppingdestroy = destroy;
871 136 eps->stoppingctx = ctx;
872
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
136 if (func == EPSStoppingBasic) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_BASIC));
873
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
136 else if (func == EPSStoppingThreshold) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD));
874 else {
875 16 eps->stop = EPS_STOP_USER;
876 16 eps->stopping = eps->stoppinguser;
877 }
878
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.
38 PetscFunctionReturn(PETSC_SUCCESS);
879 }
880
881 /*@
882 EPSSetStoppingTest - Specifies how to decide the termination of the outer
883 loop of the eigensolver.
884
885 Logically Collective
886
887 Input Parameters:
888 + eps - the linear eigensolver context
889 - stop - the type of stopping test, see `EPSStop`
890
891 Options Database Keys:
892 + -eps_stop_basic - sets the default stopping test
893 . -eps_stop_threshold - sets the threshold stopping test
894 - -eps_stop_user - selects the user-defined stopping test
895
896 Level: advanced
897
898 .seealso: [](ch:eps), `EPSGetStoppingTest()`, `EPSSetStoppingTestFunction()`, `EPSSetConvergenceTest()`, `EPSStop`
899 @*/
900 253 PetscErrorCode EPSSetStoppingTest(EPS eps,EPSStop stop)
901 {
902
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
253 PetscFunctionBegin;
903
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.
253 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
904
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.
253 PetscValidLogicalCollectiveEnum(eps,stop,2);
905
2/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
253 switch (stop) {
906 13 case EPS_STOP_BASIC: eps->stopping = EPSStoppingBasic; break;
907 240 case EPS_STOP_THRESHOLD: eps->stopping = EPSStoppingThreshold; break;
908 case EPS_STOP_USER:
909 PetscCheck(eps->stoppinguser,PetscObjectComm((PetscObject)eps),PETSC_ERR_ORDER,"Must call EPSSetStoppingTestFunction() first");
910 eps->stopping = eps->stoppinguser;
911 break;
912 default:
913 SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'stop' value");
914 }
915 253 eps->stop = stop;
916
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
253 PetscFunctionReturn(PETSC_SUCCESS);
917 }
918
919 /*@
920 EPSGetStoppingTest - Gets the method used to decide the termination of the outer
921 loop of the eigensolver.
922
923 Not Collective
924
925 Input Parameter:
926 . eps - the linear eigensolver context
927
928 Output Parameter:
929 . stop - the type of stopping test
930
931 Level: advanced
932
933 .seealso: [](ch:eps), `EPSSetStoppingTest()`, `EPSStop`
934 @*/
935 225 PetscErrorCode EPSGetStoppingTest(EPS eps,EPSStop *stop)
936 {
937
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
225 PetscFunctionBegin;
938
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.
225 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
939
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.
225 PetscAssertPointer(stop,2);
940 225 *stop = eps->stop;
941
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.
225 PetscFunctionReturn(PETSC_SUCCESS);
942 }
943
944 /*@
945 EPSSetProblemType - Specifies the type of the eigenvalue problem.
946
947 Logically Collective
948
949 Input Parameters:
950 + eps - the linear eigensolver context
951 - type - a known type of eigenvalue problem
952
953 Options Database Keys:
954 + -eps_hermitian - Hermitian eigenvalue problem
955 . -eps_gen_hermitian - generalized Hermitian eigenvalue problem
956 . -eps_non_hermitian - non-Hermitian eigenvalue problem
957 . -eps_gen_non_hermitian - generalized non-Hermitian eigenvalue problem
958 . -eps_pos_gen_non_hermitian - generalized non-Hermitian eigenvalue problem
959 with positive semi-definite $B$
960 . -eps_gen_indefinite - generalized Hermitian-indefinite eigenvalue problem
961 . -eps_bse - structured Bethe-Salpeter eigenvalue problem
962 - -eps_hamiltonian - structured Hamiltonian eigenvalue problem
963
964 Notes:
965 This function must be used to instruct SLEPc to exploit symmetry or other
966 kind of structure. If no
967 problem type is specified, by default a non-Hermitian problem is assumed
968 (either standard or generalized). If the user knows that the problem is
969 Hermitian (i.e., $A=A^*$) or generalized Hermitian (i.e., $A=A^*$, $B=B^*$,
970 and $B$ positive definite) then it is recommended to set the problem type so
971 that the eigensolver can exploit these properties.
972
973 If the user does not call this function, the solver will use a reasonable
974 guess.
975
976 For structured problem types such as `EPS_BSE`, the matrices passed in via
977 `EPSSetOperators()` must have been created with the corresponding helper
978 function, i.e., `MatCreateBSE()`.
979
980 Level: intermediate
981
982 .seealso: [](ch:eps), `EPSSetOperators()`, `EPSSetType()`, `EPSGetProblemType()`, `EPSProblemType`
983 @*/
984 6104 PetscErrorCode EPSSetProblemType(EPS eps,EPSProblemType type)
985 {
986
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
6104 PetscFunctionBegin;
987
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.
6104 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
988
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.
6104 PetscValidLogicalCollectiveEnum(eps,type,2);
989
8/14
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
6104 if (type == eps->problem_type) PetscFunctionReturn(PETSC_SUCCESS);
990
8/9
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 7 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 8 times.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
5889 switch (type) {
991 2205 case EPS_HEP:
992 2205 eps->isgeneralized = PETSC_FALSE;
993 2205 eps->ishermitian = PETSC_TRUE;
994 2205 eps->ispositive = PETSC_FALSE;
995 2205 eps->isstructured = PETSC_FALSE;
996 2205 break;
997 1406 case EPS_NHEP:
998 1406 eps->isgeneralized = PETSC_FALSE;
999 1406 eps->ishermitian = PETSC_FALSE;
1000 1406 eps->ispositive = PETSC_FALSE;
1001 1406 eps->isstructured = PETSC_FALSE;
1002 1406 break;
1003 1105 case EPS_GHEP:
1004 1105 eps->isgeneralized = PETSC_TRUE;
1005 1105 eps->ishermitian = PETSC_TRUE;
1006 1105 eps->ispositive = PETSC_TRUE;
1007 1105 eps->isstructured = PETSC_FALSE;
1008 1105 break;
1009 560 case EPS_GNHEP:
1010 560 eps->isgeneralized = PETSC_TRUE;
1011 560 eps->ishermitian = PETSC_FALSE;
1012 560 eps->ispositive = PETSC_FALSE;
1013 560 eps->isstructured = PETSC_FALSE;
1014 560 break;
1015 27 case EPS_PGNHEP:
1016 27 eps->isgeneralized = PETSC_TRUE;
1017 27 eps->ishermitian = PETSC_FALSE;
1018 27 eps->ispositive = PETSC_TRUE;
1019 27 eps->isstructured = PETSC_FALSE;
1020 27 break;
1021 130 case EPS_GHIEP:
1022 130 eps->isgeneralized = PETSC_TRUE;
1023 130 eps->ishermitian = PETSC_TRUE;
1024 130 eps->ispositive = PETSC_FALSE;
1025 130 eps->isstructured = PETSC_FALSE;
1026 130 break;
1027 380 case EPS_BSE:
1028 380 eps->isgeneralized = PETSC_FALSE;
1029 380 eps->ishermitian = PETSC_FALSE;
1030 380 eps->ispositive = PETSC_FALSE;
1031 380 eps->isstructured = PETSC_TRUE;
1032 380 break;
1033 76 case EPS_HAMILT:
1034 76 eps->isgeneralized = PETSC_FALSE;
1035 76 eps->ishermitian = PETSC_FALSE;
1036 76 eps->ispositive = PETSC_FALSE;
1037 76 eps->isstructured = PETSC_TRUE;
1038 76 break;
1039 default:
1040 SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONG,"Unknown eigenvalue problem type");
1041 }
1042 5889 eps->problem_type = type;
1043 5889 eps->state = EPS_STATE_INITIAL;
1044
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.
5889 PetscFunctionReturn(PETSC_SUCCESS);
1045 }
1046
1047 /*@
1048 EPSGetProblemType - Gets the problem type from the `EPS` object.
1049
1050 Not Collective
1051
1052 Input Parameter:
1053 . eps - the linear eigensolver context
1054
1055 Output Parameter:
1056 . type - the problem type
1057
1058 Level: intermediate
1059
1060 .seealso: [](ch:eps), `EPSSetProblemType()`, `EPSProblemType`
1061 @*/
1062 633 PetscErrorCode EPSGetProblemType(EPS eps,EPSProblemType *type)
1063 {
1064
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
633 PetscFunctionBegin;
1065
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
633 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1066
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.
633 PetscAssertPointer(type,2);
1067 633 *type = eps->problem_type;
1068
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.
633 PetscFunctionReturn(PETSC_SUCCESS);
1069 }
1070
1071 /*@
1072 EPSSetExtraction - Specifies the type of extraction technique to be employed
1073 by the eigensolver.
1074
1075 Logically Collective
1076
1077 Input Parameters:
1078 + eps - the linear eigensolver context
1079 - extr - a known type of extraction
1080
1081 Options Database Keys:
1082 + -eps_ritz - Rayleigh-Ritz extraction
1083 . -eps_harmonic - harmonic Ritz extraction
1084 . -eps_harmonic_relative - harmonic Ritz extraction relative to the eigenvalue
1085 . -eps_harmonic_right - harmonic Ritz extraction for rightmost eigenvalues
1086 . -eps_harmonic_largest - harmonic Ritz extraction for largest magnitude (without target)
1087 . -eps_refined - refined Ritz extraction
1088 - -eps_refined_harmonic - refined harmonic Ritz extraction
1089
1090 Notes:
1091 Not all eigensolvers support all types of extraction.
1092
1093 By default, a standard Rayleigh-Ritz extraction is used. Other extractions
1094 may be useful when computing interior eigenvalues.
1095
1096 Harmonic-type extractions are used in combination with a target, see `EPSSetTarget()`.
1097
1098 Level: advanced
1099
1100 .seealso: [](ch:eps), [](#sec:harmonic), `EPSSetTarget()`, `EPSGetExtraction()`, `EPSExtraction`
1101 @*/
1102 115 PetscErrorCode EPSSetExtraction(EPS eps,EPSExtraction extr)
1103 {
1104
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
115 PetscFunctionBegin;
1105
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.
115 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1106
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.
115 PetscValidLogicalCollectiveEnum(eps,extr,2);
1107
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
115 if (eps->extraction != extr) {
1108 115 eps->state = EPS_STATE_INITIAL;
1109 115 eps->extraction = extr;
1110 }
1111
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.
115 PetscFunctionReturn(PETSC_SUCCESS);
1112 }
1113
1114 /*@
1115 EPSGetExtraction - Gets the extraction type used by the `EPS` object.
1116
1117 Not Collective
1118
1119 Input Parameter:
1120 . eps - the linear eigensolver context
1121
1122 Output Parameter:
1123 . extr - name of extraction type
1124
1125 Level: advanced
1126
1127 .seealso: [](ch:eps), `EPSSetExtraction()`, `EPSExtraction`
1128 @*/
1129 26 PetscErrorCode EPSGetExtraction(EPS eps,EPSExtraction *extr)
1130 {
1131
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
26 PetscFunctionBegin;
1132
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
26 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1133
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
26 PetscAssertPointer(extr,2);
1134 26 *extr = eps->extraction;
1135
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
26 PetscFunctionReturn(PETSC_SUCCESS);
1136 }
1137
1138 /*@
1139 EPSSetBalance - Specifies the balancing technique to be employed by the
1140 eigensolver, and some parameters associated to it.
1141
1142 Logically Collective
1143
1144 Input Parameters:
1145 + eps - the linear eigensolver context
1146 . bal - the balancing method, see `EPSBalance` for possible values
1147 . its - number of iterations of the balancing algorithm
1148 - cutoff - cutoff value
1149
1150 Options Database Keys:
1151 + -eps_balance \<bal\> - the balancing method, one of `none`, `oneside`, `twoside`, or `user`
1152 . -eps_balance_its \<its\> - number of iterations
1153 - -eps_balance_cutoff \<cutoff\> - cutoff value
1154
1155 Notes:
1156 When balancing is enabled, the solver works implicitly with matrix $DAD^{-1}$,
1157 where $D$ is an appropriate diagonal matrix. This improves the accuracy of
1158 the computed results in some cases, see [](sec:balancing).
1159
1160 Balancing makes sense only for non-Hermitian problems when the required
1161 precision is high (i.e., a small tolerance such as `1e-14`).
1162
1163 By default, balancing is disabled. The two-sided method is much more
1164 effective than the one-sided counterpart, but it requires the system
1165 matrices to have the `MatMultTranspose()` operation defined. The methods
1166 are described in {cite:p}`Che00`.
1167
1168 The parameter `its` is the number of iterations performed by the method. The
1169 `cutoff` value is used only in the two-side variant. Use `PETSC_DETERMINE` to assign
1170 a reasonably good value, or `PETSC_CURRENT` to leave the value unchanged.
1171
1172 User-defined balancing is allowed provided that the corresponding matrix
1173 is set via `STSetBalanceMatrix()`.
1174
1175 Level: intermediate
1176
1177 .seealso: [](ch:eps), [](sec:balancing), `EPSGetBalance()`, `EPSBalance`, `STSetBalanceMatrix()`
1178 @*/
1179 133 PetscErrorCode EPSSetBalance(EPS eps,EPSBalance bal,PetscInt its,PetscReal cutoff)
1180 {
1181
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
133 PetscFunctionBegin;
1182
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.
133 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1183
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.
133 PetscValidLogicalCollectiveEnum(eps,bal,2);
1184
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.
133 PetscValidLogicalCollectiveInt(eps,its,3);
1185
29/66
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
133 PetscValidLogicalCollectiveReal(eps,cutoff,4);
1186
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
133 switch (bal) {
1187 133 case EPS_BALANCE_NONE:
1188 case EPS_BALANCE_ONESIDE:
1189 case EPS_BALANCE_TWOSIDE:
1190 case EPS_BALANCE_USER:
1191
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
133 if (eps->balance != bal) {
1192 117 eps->state = EPS_STATE_INITIAL;
1193 117 eps->balance = bal;
1194 }
1195 133 break;
1196 default:
1197 SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid value of argument 'bal'");
1198 }
1199
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
133 if (its==PETSC_DETERMINE) eps->balance_its = 5;
1200
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
133 else if (its!=PETSC_CURRENT) {
1201
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
133 PetscCheck(its>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of its. Must be > 0");
1202 133 eps->balance_its = its;
1203 }
1204
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
133 if (cutoff==(PetscReal)PETSC_DETERMINE) eps->balance_cutoff = 1e-8;
1205
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
133 else if (cutoff!=(PetscReal)PETSC_CURRENT) {
1206
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
133 PetscCheck(cutoff>0.0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of cutoff. Must be > 0");
1207 133 eps->balance_cutoff = cutoff;
1208 }
1209
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.
32 PetscFunctionReturn(PETSC_SUCCESS);
1210 }
1211
1212 /*@
1213 EPSGetBalance - Gets the balancing type used by the `EPS` object, and the
1214 associated parameters.
1215
1216 Not Collective
1217
1218 Input Parameter:
1219 . eps - the linear eigensolver context
1220
1221 Output Parameters:
1222 + bal - the balancing method
1223 . its - number of iterations of the balancing algorithm
1224 - cutoff - cutoff value
1225
1226 Level: intermediate
1227
1228 Note:
1229 The user can specify `NULL` for any parameter that is not needed.
1230
1231 .seealso: [](ch:eps), `EPSSetBalance()`, `EPSBalance`
1232 @*/
1233 13 PetscErrorCode EPSGetBalance(EPS eps,EPSBalance *bal,PetscInt *its,PetscReal *cutoff)
1234 {
1235
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13 PetscFunctionBegin;
1236
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.
13 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1237
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
13 if (bal) *bal = eps->balance;
1238
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
13 if (its) *its = eps->balance_its;
1239
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
13 if (cutoff) *cutoff = eps->balance_cutoff;
1240
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.
13 PetscFunctionReturn(PETSC_SUCCESS);
1241 }
1242
1243 /*@
1244 EPSSetTwoSided - Sets the solver to use a two-sided variant so that left
1245 eigenvectors are also computed.
1246
1247 Logically Collective
1248
1249 Input Parameters:
1250 + eps - the linear eigensolver context
1251 - twosided - whether the two-sided variant is to be used or not
1252
1253 Options Database Key:
1254 . -eps_two_sided - toggles the twosided flag
1255
1256 Notes:
1257 If the user sets `twosided`=`PETSC_TRUE` then the solver uses a variant of
1258 the algorithm that computes both right and left eigenvectors. This is
1259 usually much more costly. This option is not available in all solvers,
1260 see table [](#tab:support).
1261
1262 When using two-sided solvers, the problem matrices must have both the
1263 `MATOP_MULT` and `MATOP_MULT_TRANSPOSE` operations defined.
1264
1265 Level: advanced
1266
1267 .seealso: [](ch:eps), `EPSGetTwoSided()`, `EPSGetLeftEigenvector()`
1268 @*/
1269 257 PetscErrorCode EPSSetTwoSided(EPS eps,PetscBool twosided)
1270 {
1271
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
257 PetscFunctionBegin;
1272
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.
257 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1273
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.
257 PetscValidLogicalCollectiveBool(eps,twosided,2);
1274
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
257 if (twosided!=eps->twosided) {
1275 169 eps->twosided = twosided;
1276 169 eps->state = EPS_STATE_INITIAL;
1277 }
1278
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.
257 PetscFunctionReturn(PETSC_SUCCESS);
1279 }
1280
1281 /*@
1282 EPSGetTwoSided - Returns the flag indicating whether a two-sided variant
1283 of the algorithm is being used or not.
1284
1285 Not Collective
1286
1287 Input Parameter:
1288 . eps - the linear eigensolver context
1289
1290 Output Parameter:
1291 . twosided - the returned flag
1292
1293 Level: advanced
1294
1295 .seealso: [](ch:eps), `EPSSetTwoSided()`
1296 @*/
1297 55 PetscErrorCode EPSGetTwoSided(EPS eps,PetscBool *twosided)
1298 {
1299
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
55 PetscFunctionBegin;
1300
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(eps,EPS_CLASSID,1);
1301
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(twosided,2);
1302 55 *twosided = eps->twosided;
1303
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);
1304 }
1305
1306 /*@
1307 EPSSetTrueResidual - Specifies if the solver must compute the true residual
1308 explicitly or not.
1309
1310 Logically Collective
1311
1312 Input Parameters:
1313 + eps - the linear eigensolver context
1314 - trueres - whether true residuals are required or not
1315
1316 Options Database Key:
1317 . -eps_true_residual - toggles the true residual
1318
1319 Notes:
1320 If the user sets `trueres`=`PETSC_TRUE` then the solver explicitly computes
1321 the true residual for each eigenpair approximation, and uses it for
1322 convergence testing. Computing the residual is usually an expensive
1323 operation. Some solvers (e.g., Krylov solvers) can avoid this computation
1324 by using a cheap estimate of the residual norm, but this may sometimes
1325 give inaccurate results (especially if a spectral transform is being
1326 used). On the contrary, preconditioned eigensolvers (e.g., Davidson solvers)
1327 do rely on computing the true residual, so this option is irrelevant for them.
1328
1329 Level: advanced
1330
1331 .seealso: [](ch:eps), `EPSGetTrueResidual()`
1332 @*/
1333 72 PetscErrorCode EPSSetTrueResidual(EPS eps,PetscBool trueres)
1334 {
1335
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
72 PetscFunctionBegin;
1336
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.
72 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1337
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.
72 PetscValidLogicalCollectiveBool(eps,trueres,2);
1338 72 eps->trueres = trueres;
1339
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.
72 PetscFunctionReturn(PETSC_SUCCESS);
1340 }
1341
1342 /*@
1343 EPSGetTrueResidual - Returns the flag indicating whether true
1344 residuals must be computed explicitly or not.
1345
1346 Not Collective
1347
1348 Input Parameter:
1349 . eps - the linear eigensolver context
1350
1351 Output Parameter:
1352 . trueres - the returned flag
1353
1354 Level: advanced
1355
1356 .seealso: [](ch:eps), `EPSSetTrueResidual()`
1357 @*/
1358 64 PetscErrorCode EPSGetTrueResidual(EPS eps,PetscBool *trueres)
1359 {
1360
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
64 PetscFunctionBegin;
1361
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.
64 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1362
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.
64 PetscAssertPointer(trueres,2);
1363 64 *trueres = eps->trueres;
1364
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.
64 PetscFunctionReturn(PETSC_SUCCESS);
1365 }
1366
1367 /*@
1368 EPSSetTrackAll - Specifies if the solver must compute the residual norm of all
1369 approximate eigenpairs or not.
1370
1371 Logically Collective
1372
1373 Input Parameters:
1374 + eps - the linear eigensolver context
1375 - trackall - whether to compute all residuals or not
1376
1377 Notes:
1378 If the user sets `trackall`=`PETSC_TRUE` then the solver computes (or estimates)
1379 the residual norm for each eigenpair approximation. Computing the residual is
1380 usually an expensive operation and solvers commonly compute only the residual
1381 associated to the first unconverged eigenpair.
1382
1383 The option `-eps_monitor_all` automatically activates this option.
1384
1385 Level: developer
1386
1387 .seealso: [](ch:eps), `EPSGetTrackAll()`
1388 @*/
1389 1219 PetscErrorCode EPSSetTrackAll(EPS eps,PetscBool trackall)
1390 {
1391
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1219 PetscFunctionBegin;
1392
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.
1219 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1393
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.
1219 PetscValidLogicalCollectiveBool(eps,trackall,2);
1394 1219 eps->trackall = trackall;
1395
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.
1219 PetscFunctionReturn(PETSC_SUCCESS);
1396 }
1397
1398 /*@
1399 EPSGetTrackAll - Returns the flag indicating whether all residual norms must
1400 be computed or not.
1401
1402 Not Collective
1403
1404 Input Parameter:
1405 . eps - the linear eigensolver context
1406
1407 Output Parameter:
1408 . trackall - the returned flag
1409
1410 Level: developer
1411
1412 .seealso: [](ch:eps), `EPSSetTrackAll()`
1413 @*/
1414 8 PetscErrorCode EPSGetTrackAll(EPS eps,PetscBool *trackall)
1415 {
1416
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
1417
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.
8 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1418
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.
8 PetscAssertPointer(trackall,2);
1419 8 *trackall = eps->trackall;
1420
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.
8 PetscFunctionReturn(PETSC_SUCCESS);
1421 }
1422
1423 /*@
1424 EPSSetPurify - Disable eigenvector purification (which is enabled by default).
1425
1426 Logically Collective
1427
1428 Input Parameters:
1429 + eps - the linear eigensolver context
1430 - purify - whether purification is done or not, use `PETSC_FALSE` to disable it
1431
1432 Options Database Key:
1433 . -eps_purify - toggles the purification flag
1434
1435 Notes:
1436 By default, eigenvectors of generalized symmetric eigenproblems are purified
1437 in order to purge directions in the nullspace of matrix $B$. If the user knows
1438 that $B$ is non-singular, then purification can be safely deactivated and some
1439 computational cost is avoided (this is particularly important in interval computations).
1440
1441 More details are given in section [](#sec:purif).
1442
1443 Level: intermediate
1444
1445 .seealso: [](ch:eps), [](#sec:purif), `EPSGetPurify()`, `EPSSetInterval()`
1446 @*/
1447 32 PetscErrorCode EPSSetPurify(EPS eps,PetscBool purify)
1448 {
1449
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
32 PetscFunctionBegin;
1450
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.
32 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1451
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.
32 PetscValidLogicalCollectiveBool(eps,purify,2);
1452
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
32 if (purify!=eps->purify) {
1453 16 eps->purify = purify;
1454 16 eps->state = EPS_STATE_INITIAL;
1455 }
1456
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.
32 PetscFunctionReturn(PETSC_SUCCESS);
1457 }
1458
1459 /*@
1460 EPSGetPurify - Returns the flag indicating whether purification is activated
1461 or not.
1462
1463 Not Collective
1464
1465 Input Parameter:
1466 . eps - the linear eigensolver context
1467
1468 Output Parameter:
1469 . purify - the returned flag
1470
1471 Level: intermediate
1472
1473 .seealso: [](ch:eps), `EPSSetPurify()`
1474 @*/
1475 8 PetscErrorCode EPSGetPurify(EPS eps,PetscBool *purify)
1476 {
1477
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
1478
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.
8 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1479
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.
8 PetscAssertPointer(purify,2);
1480 8 *purify = eps->purify;
1481
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.
8 PetscFunctionReturn(PETSC_SUCCESS);
1482 }
1483
1484 /*@
1485 EPSSetOptionsPrefix - Sets the prefix used for searching for all
1486 `EPS` options in the database.
1487
1488 Logically Collective
1489
1490 Input Parameters:
1491 + eps - the linear eigensolver context
1492 - prefix - the prefix string to prepend to all `EPS` option requests
1493
1494 Notes:
1495 A hyphen (-) must NOT be given at the beginning of the prefix name.
1496 The first character of all runtime options is AUTOMATICALLY the
1497 hyphen.
1498
1499 For example, to distinguish between the runtime options for two
1500 different `EPS` contexts, one could call
1501 .vb
1502 EPSSetOptionsPrefix(eps1,"eig1_")
1503 EPSSetOptionsPrefix(eps2,"eig2_")
1504 .ve
1505
1506 Level: advanced
1507
1508 .seealso: [](ch:eps), `EPSAppendOptionsPrefix()`, `EPSGetOptionsPrefix()`
1509 @*/
1510 1725 PetscErrorCode EPSSetOptionsPrefix(EPS eps,const char prefix[])
1511 {
1512
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1725 PetscFunctionBegin;
1513
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.
1725 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1514
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
1725 if (!eps->st) PetscCall(EPSGetST(eps,&eps->st));
1515
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1725 PetscCall(STSetOptionsPrefix(eps->st,prefix));
1516
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
1725 if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V));
1517
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1725 PetscCall(BVSetOptionsPrefix(eps->V,prefix));
1518
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
1725 if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds));
1519
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1725 PetscCall(DSSetOptionsPrefix(eps->ds,prefix));
1520
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
1725 if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg));
1521
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1725 PetscCall(RGSetOptionsPrefix(eps->rg,prefix));
1522
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1725 PetscCall(PetscObjectSetOptionsPrefix((PetscObject)eps,prefix));
1523
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.
420 PetscFunctionReturn(PETSC_SUCCESS);
1524 }
1525
1526 /*@
1527 EPSAppendOptionsPrefix - Appends to the prefix used for searching for all
1528 `EPS` options in the database.
1529
1530 Logically Collective
1531
1532 Input Parameters:
1533 + eps - the linear eigensolver context
1534 - prefix - the prefix string to prepend to all `EPS` option requests
1535
1536 Notes:
1537 A hyphen (-) must NOT be given at the beginning of the prefix name.
1538 The first character of all runtime options is AUTOMATICALLY the hyphen.
1539
1540 Level: advanced
1541
1542 .seealso: [](ch:eps), `EPSSetOptionsPrefix()`, `EPSGetOptionsPrefix()`
1543 @*/
1544 1368 PetscErrorCode EPSAppendOptionsPrefix(EPS eps,const char prefix[])
1545 {
1546
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1368 PetscFunctionBegin;
1547
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.
1368 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1548
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1368 if (!eps->st) PetscCall(EPSGetST(eps,&eps->st));
1549
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1368 PetscCall(STAppendOptionsPrefix(eps->st,prefix));
1550
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1368 if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V));
1551
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1368 PetscCall(BVAppendOptionsPrefix(eps->V,prefix));
1552
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1368 if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds));
1553
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1368 PetscCall(DSAppendOptionsPrefix(eps->ds,prefix));
1554
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1368 if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg));
1555
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1368 PetscCall(RGAppendOptionsPrefix(eps->rg,prefix));
1556
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1368 PetscCall(PetscObjectAppendOptionsPrefix((PetscObject)eps,prefix));
1557
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.
338 PetscFunctionReturn(PETSC_SUCCESS);
1558 }
1559
1560 /*@
1561 EPSGetOptionsPrefix - Gets the prefix used for searching for all
1562 `EPS` options in the database.
1563
1564 Not Collective
1565
1566 Input Parameter:
1567 . eps - the linear eigensolver context
1568
1569 Output Parameter:
1570 . prefix - pointer to the prefix string used is returned
1571
1572 Level: advanced
1573
1574 .seealso: [](ch:eps), `EPSSetOptionsPrefix()`, `EPSAppendOptionsPrefix()`
1575 @*/
1576 256 PetscErrorCode EPSGetOptionsPrefix(EPS eps,const char *prefix[])
1577 {
1578
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
256 PetscFunctionBegin;
1579
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.
256 PetscValidHeaderSpecific(eps,EPS_CLASSID,1);
1580
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.
256 PetscAssertPointer(prefix,2);
1581
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
256 PetscCall(PetscObjectGetOptionsPrefix((PetscObject)eps,prefix));
1582
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);
1583 }
1584