GCC Code Coverage Report


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