GCC Code Coverage Report


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