GCC Code Coverage Report


Directory: ./
File: src/sys/classes/st/interface/stset.c
Date: 2026-04-05 04:03:05
Exec Total Coverage
Lines: 107 115 93.0%
Functions: 10 11 90.9%
Branches: 357 830 43.0%

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