GCC Code Coverage Report


Directory: ./
File: src/sys/classes/st/interface/stset.c
Date: 2026-01-12 03:57:26
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 12287 PetscErrorCode STSetType(ST st,STType type)
43 {
44 12287 PetscErrorCode (*r)(ST);
45 12287 PetscBool match;
46
47
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
12287 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.
12287 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.
12287 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.
12287 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.
12287 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.
11390 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.
11390 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.
11390 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.
11390 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.
11390 PetscCall(PetscMemzero(st->ops,sizeof(struct _STOps)));
60
61 11390 st->state = ST_STATE_INITIAL;
62 11390 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.
11390 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.
11390 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.
2223 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 8805 PetscErrorCode STSetFromOptions(ST st)
109 {
110 8805 PetscScalar s;
111 8805 char type[256];
112 8805 PetscBool flg,bval;
113 8805 STMatMode mode;
114 8805 MatStructure mstr;
115
116
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8805 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.
8805 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.
8805 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.
26415 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.
17381 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.
8805 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.
6981 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.
8805 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.
8805 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.
8805 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.
8805 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.
8805 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.
8805 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.
8805 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.
8805 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.
8805 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.
8805 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.
8805 PetscOptionsEnd();
139
140
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
8805 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.
8479 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.
8479 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.
1719 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), `STGetMatStructure()`, `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 7562 PetscErrorCode STGetMatStructure(ST st,MatStructure *str)
213 {
214
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7562 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.
7562 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.
7562 PetscAssertPointer(str,2);
217 7562 *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.
7562 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 transformed 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 738 PetscErrorCode STSetMatMode(ST st,STMatMode mode)
258 {
259
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
738 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.
738 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.
738 PetscValidLogicalCollectiveEnum(st,mode,2);
262
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
738 if (st->matmode != mode) {
263
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
668 STCheckNotSeized(st,1);
264 668 st->matmode = mode;
265 668 st->state = ST_STATE_INITIAL;
266 668 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.
738 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 9690 PetscErrorCode STGetMatMode(ST st,STMatMode *mode)
288 {
289
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
9690 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.
9690 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.
9690 PetscAssertPointer(mode,2);
292 9690 *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.
9690 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 11092 PetscErrorCode STSetTransform(ST st,PetscBool flg)
320 {
321
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11092 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.
11092 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.
11092 PetscValidLogicalCollectiveBool(st,flg,2);
324
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
11092 if (st->transform != flg) {
325 7666 st->transform = flg;
326 7666 st->state = ST_STATE_INITIAL;
327 7666 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.
11092 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 127215 PetscErrorCode STGetTransform(ST st,PetscBool *flg)
349 {
350
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
127215 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.
127215 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.
127215 PetscAssertPointer(flg,2);
353 127215 *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.
127215 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 10176 PetscErrorCode STSetStructured(ST st,PetscBool flg)
376 {
377
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10176 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.
10176 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.
10176 PetscValidLogicalCollectiveBool(st,flg,2);
380
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
10176 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.
10176 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