GCC Code Coverage Report


Directory: ./
File: src/sys/classes/st/interface/stset.c
Date: 2026-06-15 03:58:11
Exec Total Coverage
Lines: 107 114 93.9%
Functions: 10 11 90.9%
Branches: 357 828 43.1%

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 Routines to set ST methods and options
12 */
13
14 #include <slepc/private/stimpl.h> /*I "slepcst.h" I*/
15
16 PetscBool STRegisterAllCalled = PETSC_FALSE;
17 PetscFunctionList STList = NULL;
18
19 /*@
20 STSetType - Selects the type of spectral transformation.
21
22 Logically Collective
23
24 Input Parameters:
25 + st - the spectral transformation context.
26 - type - a known type
27
28 Options Database Key:
29 . -st_type type - sets the `ST` type
30
31 Notes:
32 Normally, it is best to call the `EPSSetFromOptions()` function and
33 then set the `ST` type from the options database rather than by using
34 this routine. Using the options database provides the user with
35 maximum flexibility in evaluating the different transformations.
36
37 Level: beginner
38
39 .seealso: [](ch:st), `STGetType()`, `EPSSetType()`, `EPSSetFromOptions()`
40 @*/
41 12799 PetscErrorCode STSetType(ST st,STType type)
42 {
43 12799 PetscErrorCode (*r)(ST);
44 12799 PetscBool match;
45
46
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
12799 PetscFunctionBegin;
47
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.
12799 PetscValidHeaderSpecific(st,ST_CLASSID,1);
48
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.
12799 PetscAssertPointer(type,2);
49
50
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12799 PetscCall(PetscObjectTypeCompare((PetscObject)st,type,&match));
51
8/14
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
12799 if (match) PetscFunctionReturn(PETSC_SUCCESS);
52
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
11902 STCheckNotSeized(st,1);
53
54
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11902 PetscCall(PetscFunctionListFind(STList,type,&r));
55
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
11902 PetscCheck(r,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unable to find requested ST type %s",type);
56
57
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
11902 PetscTryTypeMethod(st,destroy);
58
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11902 PetscCall(PetscMemzero(st->ops,sizeof(struct _STOps)));
59
60 11902 st->state = ST_STATE_INITIAL;
61 11902 st->opready = PETSC_FALSE;
62
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11902 PetscCall(PetscObjectChangeTypeName((PetscObject)st,type));
63
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11902 PetscCall((*r)(st));
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.
2304 PetscFunctionReturn(PETSC_SUCCESS);
65 }
66
67 /*@
68 STGetType - Gets the `ST` type name (as a string) from the `ST` context.
69
70 Not Collective
71
72 Input Parameter:
73 . st - the spectral transformation context
74
75 Output Parameter:
76 . type - name of the spectral transformation
77
78 Note:
79 `type` should not be retained for later use as it will be an invalid pointer
80 if the `STType` of `st` is changed.
81
82 Level: intermediate
83
84 .seealso: [](ch:st), `STSetType()`, `PetscObjectTypeCompare()`, `PetscObjectTypeCompareAny()`
85 @*/
86 900 PetscErrorCode STGetType(ST st,STType *type)
87 {
88
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
900 PetscFunctionBegin;
89
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.
900 PetscValidHeaderSpecific(st,ST_CLASSID,1);
90
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.
900 PetscAssertPointer(type,2);
91 900 *type = ((PetscObject)st)->type_name;
92
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.
900 PetscFunctionReturn(PETSC_SUCCESS);
93 }
94
95 /*@
96 STSetFromOptions - Sets `ST` options from the options database.
97
98 Collective
99
100 Input Parameter:
101 . st - the spectral transformation context
102
103 Note:
104 To see all options, run your program with the `-help` option.
105
106 Level: beginner
107
108 .seealso: [](ch:st), `STSetOptionsPrefix()`
109 @*/
110 9303 PetscErrorCode STSetFromOptions(ST st)
111 {
112 9303 PetscScalar s;
113 9303 char type[256];
114 9303 PetscBool flg,bval;
115 9303 STMatMode mode;
116 9303 MatStructure mstr;
117
118
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
9303 PetscFunctionBegin;
119
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.
9303 PetscValidHeaderSpecific(st,ST_CLASSID,1);
120
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
9303 PetscCall(STRegisterAll());
121
8/10
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
27909 PetscObjectOptionsBegin((PetscObject)st);
122
7/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
18377 PetscCall(PetscOptionsFList("-st_type","Spectral transformation","STSetType",STList,(char*)(((PetscObject)st)->type_name?((PetscObject)st)->type_name:STSHIFT),type,sizeof(type),&flg));
123
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
9303 if (flg) PetscCall(STSetType(st,type));
124
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
7470 else if (!((PetscObject)st)->type_name) PetscCall(STSetType(st,STSHIFT));
125
126
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
9303 PetscCall(PetscOptionsScalar("-st_shift","Value of the shift","STSetShift",st->sigma,&s,&flg));
127
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
9303 if (flg) PetscCall(STSetShift(st,s));
128
129
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
9303 PetscCall(PetscOptionsEnum("-st_matmode","Matrix mode for transformed matrices","STSetMatMode",STMatModes,(PetscEnum)st->matmode,(PetscEnum*)&mode,&flg));
130
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
9303 if (flg) PetscCall(STSetMatMode(st,mode));
131
132
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
9303 PetscCall(PetscOptionsEnum("-st_matstructure","Relation of the sparsity pattern of the matrices","STSetMatStructure",MatStructures,(PetscEnum)st->str,(PetscEnum*)&mstr,&flg));
133
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
9303 if (flg) PetscCall(STSetMatStructure(st,mstr));
134
135
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
9303 PetscCall(PetscOptionsBool("-st_transform","Whether transformed matrices are computed or not","STSetTransform",st->transform,&bval,&flg));
136
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
9303 if (flg) PetscCall(STSetTransform(st,bval));
137
138
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
9303 PetscTryTypeMethod(st,setfromoptions,PetscOptionsObject);
139
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
9303 PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)st,PetscOptionsObject));
140
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
9303 PetscOptionsEnd();
141
142
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
9303 if (st->usesksp) {
143
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
8977 PetscCall(STSetDefaultKSP(st));
144
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
8977 PetscCall(KSPSetFromOptions(st->ksp));
145 }
146
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.
1799 PetscFunctionReturn(PETSC_SUCCESS);
147 }
148
149 /*@
150 STSetMatStructure - Sets an internal `MatStructure` attribute to
151 indicate which is the relation of the sparsity pattern of all `ST` matrices.
152
153 Logically Collective
154
155 Input Parameters:
156 + st - the spectral transformation context
157 - str - either `SAME_NONZERO_PATTERN`, `DIFFERENT_NONZERO_PATTERN`,
158 `SUBSET_NONZERO_PATTERN`, or `UNKNOWN_NONZERO_PATTERN`
159
160 Options Database Key:
161 . -st_matstructure (same|different|subset|unknown) - set the structure flag
162
163 Notes:
164 If the sparsity pattern of the second matrix is equal or a subset of the
165 pattern of the first matrix then it is recommended to set this attribute
166 for efficiency reasons (in particular, for internal `MatAXPY()` operations).
167 If not set, the default is `UNKNOWN_NONZERO_PATTERN`, in which case the patterns
168 will be compared to determine if they are equal.
169
170 This function has no effect in the case of standard eigenproblems.
171
172 In case of polynomial eigenproblems, the flag applies to all matrices
173 relative to the first one.
174
175 Level: advanced
176
177 .seealso: [](ch:st), `STGetMatStructure()`, `STSetMatrices()`, `MatAXPY()`
178 @*/
179 24 PetscErrorCode STSetMatStructure(ST st,MatStructure str)
180 {
181
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
24 PetscFunctionBegin;
182
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
24 PetscValidHeaderSpecific(st,ST_CLASSID,1);
183
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.
24 PetscValidLogicalCollectiveEnum(st,str,2);
184
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
24 switch (str) {
185 24 case SAME_NONZERO_PATTERN:
186 case DIFFERENT_NONZERO_PATTERN:
187 case SUBSET_NONZERO_PATTERN:
188 case UNKNOWN_NONZERO_PATTERN:
189 24 st->str = str;
190 24 break;
191 default:
192 SETERRQ(PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_OUTOFRANGE,"Invalid matrix structure flag");
193 }
194
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
24 PetscFunctionReturn(PETSC_SUCCESS);
195 }
196
197 /*@
198 STGetMatStructure - Gets the internal `MatStructure` attribute to
199 indicate which is the relation of the sparsity pattern of the matrices.
200
201 Not Collective
202
203 Input Parameter:
204 . st - the spectral transformation context
205
206 Output Parameter:
207 . str - either `SAME_NONZERO_PATTERN`, `DIFFERENT_NONZERO_PATTERN`,
208 `SUBSET_NONZERO_PATTERN`, or `UNKNOWN_NONZERO_PATTERN`
209
210 Level: advanced
211
212 .seealso: [](ch:st), `STSetMatStructure()`, `STSetMatrices()`, `MatAXPY()`
213 @*/
214 7594 PetscErrorCode STGetMatStructure(ST st,MatStructure *str)
215 {
216
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7594 PetscFunctionBegin;
217
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.
7594 PetscValidHeaderSpecific(st,ST_CLASSID,1);
218
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.
7594 PetscAssertPointer(str,2);
219 7594 *str = st->str;
220
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.
7594 PetscFunctionReturn(PETSC_SUCCESS);
221 }
222
223 /*@
224 STSetMatMode - Sets a flag to indicate how the transformed matrices are
225 being stored in the spectral transformations.
226
227 Logically Collective
228
229 Input Parameters:
230 + st - the spectral transformation context
231 - mode - the mode
232
233 Options Database Key:
234 . -st_matmode (copy|inplace|shell) - set the mode
235
236 Notes:
237 By default (`ST_MATMODE_COPY`), a copy of matrix $A$ is made and then
238 this copy is modified explicitly, e.g., $A \leftarrow A - \sigma B$.
239
240 With `ST_MATMODE_INPLACE`, the original matrix $A$ is modified at `STSetUp()`
241 and changes are reverted at the end of the computations. With respect to
242 the previous one, this mode avoids a copy of matrix $A$. However, a
243 drawback is that the recovered matrix might be slightly different
244 from the original one (due to roundoff).
245
246 With `ST_MATMODE_SHELL`, the solver works with an implicit shell
247 matrix that represents the shifted matrix. This mode is the most efficient
248 in creating the transformed matrix but it places serious limitations to the
249 linear solves performed in each iteration of the eigensolver (typically,
250 only iterative solvers with Jacobi preconditioning can be used).
251
252 In the two first modes the efficiency of the computation can be controlled
253 with `STSetMatStructure()`.
254
255 Level: intermediate
256
257 .seealso: [](ch:st), `STSetMatrices()`, `STSetMatStructure()`, `STGetMatMode()`, `STMatMode`
258 @*/
259 740 PetscErrorCode STSetMatMode(ST st,STMatMode mode)
260 {
261
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
740 PetscFunctionBegin;
262
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.
740 PetscValidHeaderSpecific(st,ST_CLASSID,1);
263
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.
740 PetscValidLogicalCollectiveEnum(st,mode,2);
264
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
740 if (st->matmode != mode) {
265
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
670 STCheckNotSeized(st,1);
266 670 st->matmode = mode;
267 670 st->state = ST_STATE_INITIAL;
268 670 st->opready = PETSC_FALSE;
269 }
270
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.
740 PetscFunctionReturn(PETSC_SUCCESS);
271 }
272
273 /*@
274 STGetMatMode - Gets a flag that indicates how the transformed matrices
275 are stored in spectral transformations.
276
277 Not Collective
278
279 Input Parameter:
280 . st - the spectral transformation context
281
282 Output Parameter:
283 . mode - the mode flag
284
285 Level: intermediate
286
287 .seealso: [](ch:st), `STSetMatMode()`, `STMatMode`
288 @*/
289 10201 PetscErrorCode STGetMatMode(ST st,STMatMode *mode)
290 {
291
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10201 PetscFunctionBegin;
292
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.
10201 PetscValidHeaderSpecific(st,ST_CLASSID,1);
293
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.
10201 PetscAssertPointer(mode,2);
294 10201 *mode = st->matmode;
295
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.
10201 PetscFunctionReturn(PETSC_SUCCESS);
296 }
297
298 /*@
299 STSetTransform - Sets a flag to indicate whether the transformed matrices are
300 computed or not.
301
302 Logically Collective
303
304 Input Parameters:
305 + st - the spectral transformation context
306 - flg - the boolean flag
307
308 Options Database Key:
309 . -st_transform (true|false) - toggle the computation of matrices
310
311 Notes:
312 This flag is intended for the case of polynomial eigenproblems solved
313 via linearization. If this flag is off (default) the spectral transformation
314 is applied to the linearization (handled by the eigensolver), otherwise
315 it is applied to the original problem.
316
317 Level: developer
318
319 .seealso: [](ch:st), `STMatSolve()`, `STMatMult()`, `STSetMatStructure()`, `STGetTransform()`
320 @*/
321 11607 PetscErrorCode STSetTransform(ST st,PetscBool flg)
322 {
323
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11607 PetscFunctionBegin;
324
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.
11607 PetscValidHeaderSpecific(st,ST_CLASSID,1);
325
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.
11607 PetscValidLogicalCollectiveBool(st,flg,2);
326
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
11607 if (st->transform != flg) {
327 8159 st->transform = flg;
328 8159 st->state = ST_STATE_INITIAL;
329 8159 st->opready = PETSC_FALSE;
330 }
331
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
11607 PetscFunctionReturn(PETSC_SUCCESS);
332 }
333
334 /*@
335 STGetTransform - Gets a flag that indicates whether the transformed
336 matrices are computed or not.
337
338 Not Collective
339
340 Input Parameter:
341 . st - the spectral transformation context
342
343 Output Parameter:
344 . flg - the flag
345
346 Level: developer
347
348 .seealso: [](ch:st), `STSetTransform()`
349 @*/
350 126724 PetscErrorCode STGetTransform(ST st,PetscBool *flg)
351 {
352
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
126724 PetscFunctionBegin;
353
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.
126724 PetscValidHeaderSpecific(st,ST_CLASSID,1);
354
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.
126724 PetscAssertPointer(flg,2);
355 126724 *flg = st->transform;
356
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.
126724 PetscFunctionReturn(PETSC_SUCCESS);
357 }
358
359 /*@
360 STSetStructured - Sets a flag to indicate that the application of the
361 operator must be done taking into account its structure.
362
363 Logically Collective
364
365 Input Parameters:
366 + st - the spectral transformation context
367 - flg - the boolean flag
368
369 Note:
370 This flag is intended for the case of structured eigenproblems. It is set
371 internally by the solver, the user should not modify its value.
372
373 Level: developer
374
375 .seealso: [](ch:st), `STApply()`, `STGetStructured()`
376 @*/
377 11166 PetscErrorCode STSetStructured(ST st,PetscBool flg)
378 {
379
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11166 PetscFunctionBegin;
380
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.
11166 PetscValidHeaderSpecific(st,ST_CLASSID,1);
381
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.
11166 PetscValidLogicalCollectiveBool(st,flg,2);
382
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
11166 if (st->structured != flg) {
383 505 st->structured = flg;
384 505 st->state = ST_STATE_INITIAL;
385 505 st->opready = PETSC_FALSE;
386 }
387
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.
11166 PetscFunctionReturn(PETSC_SUCCESS);
388 }
389
390 /*@
391 STGetStructured - Gets a flag that indicates if the application of the
392 operator is done using its structure.
393
394 Not Collective
395
396 Input Parameter:
397 . st - the spectral transformation context
398
399 Output Parameter:
400 . flg - the flag
401
402 Level: developer
403
404 .seealso: [](ch:st), `STSetStructured()`
405 @*/
406 PetscErrorCode STGetStructured(ST st,PetscBool *flg)
407 {
408 PetscFunctionBegin;
409 PetscValidHeaderSpecific(st,ST_CLASSID,1);
410 PetscAssertPointer(flg,2);
411 *flg = st->structured;
412 PetscFunctionReturn(PETSC_SUCCESS);
413 }
414