GCC Code Coverage Report


Directory: ./
File: src/sys/classes/rg/interface/rgbasic.c
Date: 2026-06-15 03:58:11
Exec Total Coverage
Lines: 246 256 96.1%
Functions: 25 26 96.2%
Branches: 693 1626 42.6%

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 Basic RG routines
12 */
13
14 #include <slepc/private/rgimpl.h> /*I "slepcrg.h" I*/
15
16 PetscFunctionList RGList = NULL;
17 PetscBool RGRegisterAllCalled = PETSC_FALSE;
18 PetscClassId RG_CLASSID = 0;
19 static PetscBool RGPackageInitialized = PETSC_FALSE;
20
21 /*@C
22 RGFinalizePackage - This function destroys everything in the SLEPc interface
23 to the `RG` package. It is called from `SlepcFinalize()`.
24
25 Level: developer
26
27 .seealso: [](sec:rg), `SlepcFinalize()`, `BVInitializePackage()`
28 @*/
29 9252 PetscErrorCode RGFinalizePackage(void)
30 {
31
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
9252 PetscFunctionBegin;
32
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.
9252 PetscCall(PetscFunctionListDestroy(&RGList));
33 9252 RGPackageInitialized = PETSC_FALSE;
34 9252 RGRegisterAllCalled = PETSC_FALSE;
35
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.
9252 PetscFunctionReturn(PETSC_SUCCESS);
36 }
37
38 /*@C
39 RGInitializePackage - This function initializes everything in the `RG` package.
40 It is called from `PetscDLLibraryRegister_slepc()` when using dynamic libraries, and
41 on the first call to `RGCreate()` when using shared or static libraries.
42
43 Note:
44 This function never needs to be called by SLEPc users.
45
46 Level: developer
47
48 .seealso: [](sec:rg), `RG`, `SlepcInitialize()`, `RGFinalizePackage()`
49 @*/
50 47916 PetscErrorCode RGInitializePackage(void)
51 {
52 47916 char logList[256];
53 47916 PetscBool opt,pkg;
54 47916 PetscClassId classids[1];
55
56
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
47916 PetscFunctionBegin;
57
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.
47916 if (RGPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
58 9252 RGPackageInitialized = PETSC_TRUE;
59 /* Register Classes */
60
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.
9252 PetscCall(PetscClassIdRegister("Region",&RG_CLASSID));
61 /* Register Constructors */
62
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
9252 PetscCall(RGRegisterAll());
63 /* Process Info */
64 9252 classids[0] = RG_CLASSID;
65
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.
9252 PetscCall(PetscInfoProcessClass("rg",1,&classids[0]));
66 /* Process summary exclusions */
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.
9252 PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
68
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
9252 if (opt) {
69
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.
84 PetscCall(PetscStrInList("rg",logList,',',&pkg));
70
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.
84 if (pkg) PetscCall(PetscLogEventDeactivateClass(RG_CLASSID));
71 }
72 /* Register package finalizer */
73
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.
9252 PetscCall(PetscRegisterFinalize(RGFinalizePackage));
74
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
1799 PetscFunctionReturn(PETSC_SUCCESS);
75 }
76
77 /*@
78 RGCreate - Creates an `RG` context.
79
80 Collective
81
82 Input Parameter:
83 . comm - MPI communicator
84
85 Output Parameter:
86 . newrg - location to put the `RG` context
87
88 Level: beginner
89
90 .seealso: [](sec:rg), `RG`, `RGDestroy()`
91 @*/
92 10861 PetscErrorCode RGCreate(MPI_Comm comm,RG *newrg)
93 {
94 10861 RG rg;
95
96
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10861 PetscFunctionBegin;
97
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.
10861 PetscAssertPointer(newrg,2);
98
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.
10861 PetscCall(RGInitializePackage());
99
7/12
✓ 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 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
10861 PetscCall(SlepcHeaderCreate(rg,RG_CLASSID,"RG","Region","RG",comm,RGDestroy,RGView));
100 10861 rg->complement = PETSC_FALSE;
101 10861 rg->sfactor = 1.0;
102 10861 rg->osfactor = 0.0;
103 10861 rg->data = NULL;
104
105 10861 *newrg = rg;
106
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.
10861 PetscFunctionReturn(PETSC_SUCCESS);
107 }
108
109 /*@
110 RGSetOptionsPrefix - Sets the prefix used for searching for all
111 `RG` options in the database.
112
113 Logically Collective
114
115 Input Parameters:
116 + rg - the region context
117 - prefix - the prefix string to prepend to all `RG` option requests
118
119 Notes:
120 A hyphen (-) must NOT be given at the beginning of the prefix name.
121 The first character of all runtime options is AUTOMATICALLY the
122 hyphen.
123
124 Level: advanced
125
126 .seealso: [](sec:rg), `RGAppendOptionsPrefix()`
127 @*/
128 2461 PetscErrorCode RGSetOptionsPrefix(RG rg,const char prefix[])
129 {
130
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2461 PetscFunctionBegin;
131
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.
2461 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
132
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2461 PetscCall(PetscObjectSetOptionsPrefix((PetscObject)rg,prefix));
133
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.
476 PetscFunctionReturn(PETSC_SUCCESS);
134 }
135
136 /*@
137 RGAppendOptionsPrefix - Appends to the prefix used for searching for all
138 `RG` options in the database.
139
140 Logically Collective
141
142 Input Parameters:
143 + rg - the region context
144 - prefix - the prefix string to prepend to all `RG` option requests
145
146 Notes:
147 A hyphen (-) must NOT be given at the beginning of the prefix name.
148 The first character of all runtime options is AUTOMATICALLY the hyphen.
149
150 Level: advanced
151
152 .seealso: [](sec:rg), `RGSetOptionsPrefix()`
153 @*/
154 1982 PetscErrorCode RGAppendOptionsPrefix(RG rg,const char prefix[])
155 {
156
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1982 PetscFunctionBegin;
157
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.
1982 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
158
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.
1982 PetscCall(PetscObjectAppendOptionsPrefix((PetscObject)rg,prefix));
159
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.
394 PetscFunctionReturn(PETSC_SUCCESS);
160 }
161
162 /*@
163 RGGetOptionsPrefix - Gets the prefix used for searching for all
164 `RG` options in the database.
165
166 Not Collective
167
168 Input Parameter:
169 . rg - the region context
170
171 Output Parameter:
172 . prefix - pointer to the prefix string used is returned
173
174 Level: advanced
175
176 .seealso: [](sec:rg), `RGSetOptionsPrefix()`, `RGAppendOptionsPrefix()`
177 @*/
178 PetscErrorCode RGGetOptionsPrefix(RG rg,const char *prefix[])
179 {
180 PetscFunctionBegin;
181 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
182 PetscAssertPointer(prefix,2);
183 PetscCall(PetscObjectGetOptionsPrefix((PetscObject)rg,prefix));
184 PetscFunctionReturn(PETSC_SUCCESS);
185 }
186
187 /*@
188 RGSetType - Selects the type for the `RG` object.
189
190 Logically Collective
191
192 Input Parameters:
193 + rg - the region context
194 - type - a known type
195
196 Options Database Key:
197 . -rg_type type - sets `RG` type
198
199 Level: beginner
200
201 .seealso: [](sec:rg), `RGGetType()`
202 @*/
203 11620 PetscErrorCode RGSetType(RG rg,RGType type)
204 {
205 11620 PetscErrorCode (*r)(RG);
206 11620 PetscBool match;
207
208
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11620 PetscFunctionBegin;
209
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.
11620 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
210
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.
11620 PetscAssertPointer(type,2);
211
212
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.
11620 PetscCall(PetscObjectTypeCompare((PetscObject)rg,type,&match));
213
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.
11620 if (match) PetscFunctionReturn(PETSC_SUCCESS);
214
215
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.
10987 PetscCall(PetscFunctionListFind(RGList,type,&r));
216
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
10987 PetscCheck(r,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unable to find requested RG type %s",type);
217
218
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.
10987 PetscTryTypeMethod(rg,destroy);
219
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.
10987 PetscCall(PetscMemzero(rg->ops,sizeof(struct _RGOps)));
220
221
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.
10987 PetscCall(PetscObjectChangeTypeName((PetscObject)rg,type));
222
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.
10987 PetscCall((*r)(rg));
223
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.
2123 PetscFunctionReturn(PETSC_SUCCESS);
224 }
225
226 /*@
227 RGGetType - Gets the `RG` type name (as a string) from the `RG` context.
228
229 Not Collective
230
231 Input Parameter:
232 . rg - the region context
233
234 Output Parameter:
235 . type - name of the region
236
237 Note:
238 `type` should not be retained for later use as it will be an invalid pointer
239 if the `RGType` of `rg` is changed.
240
241 Level: beginner
242
243 .seealso: [](sec:rg), `RGSetType()`, `PetscObjectTypeCompare()`, `PetscObjectTypeCompareAny()`
244 @*/
245 50 PetscErrorCode RGGetType(RG rg,RGType *type)
246 {
247
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
50 PetscFunctionBegin;
248
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.
50 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
249
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.
50 PetscAssertPointer(type,2);
250 50 *type = ((PetscObject)rg)->type_name;
251
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.
50 PetscFunctionReturn(PETSC_SUCCESS);
252 }
253
254 /*@
255 RGSetFromOptions - Sets `RG` options from the options database.
256
257 Collective
258
259 Input Parameter:
260 . rg - the region context
261
262 Note:
263 To see all options, run your program with the `-help` option.
264
265 Level: beginner
266
267 .seealso: [](sec:rg), `RGSetOptionsPrefix()`
268 @*/
269 10873 PetscErrorCode RGSetFromOptions(RG rg)
270 {
271 10873 char type[256];
272 10873 PetscBool flg;
273 10873 PetscReal sfactor;
274
275
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10873 PetscFunctionBegin;
276
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.
10873 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
277
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.
10873 PetscCall(RGRegisterAll());
278
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.
32619 PetscObjectOptionsBegin((PetscObject)rg);
279
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.
12067 PetscCall(PetscOptionsFList("-rg_type","Region type","RGSetType",RGList,(char*)(((PetscObject)rg)->type_name?((PetscObject)rg)->type_name:RGINTERVAL),type,sizeof(type),&flg));
280
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.
10873 if (flg) PetscCall(RGSetType(rg,type));
281
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.
9737 else if (!((PetscObject)rg)->type_name) PetscCall(RGSetType(rg,RGINTERVAL));
282
283
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.
10873 PetscCall(PetscOptionsBool("-rg_complement","Whether region is complemented or not","RGSetComplement",rg->complement,&rg->complement,NULL));
284
285
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.
10873 PetscCall(PetscOptionsReal("-rg_scale","Scaling factor","RGSetScale",1.0,&sfactor,&flg));
286
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.
10873 if (flg) PetscCall(RGSetScale(rg,sfactor));
287
288
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
10873 PetscTryTypeMethod(rg,setfromoptions,PetscOptionsObject);
289
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.
10873 PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)rg,PetscOptionsObject));
290
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.
10873 PetscOptionsEnd();
291
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
10873 PetscFunctionReturn(PETSC_SUCCESS);
292 }
293
294 /*@
295 RGView - Prints the `RG` data structure.
296
297 Collective
298
299 Input Parameters:
300 + rg - the region context
301 - viewer - optional visualization context
302
303 Notes:
304 The available visualization contexts include
305 + `PETSC_VIEWER_STDOUT_SELF` - standard output (default)
306 - `PETSC_VIEWER_STDOUT_WORLD` - synchronized standard output where only the
307 first process opens the file; all other processes send their data to the
308 first one to print
309
310 The user can open an alternative visualization context with `PetscViewerASCIIOpen()`
311 to output to a specified file.
312
313 Use `RGViewFromOptions()` to allow the user to select many different `PetscViewerType`
314 and formats from the options database.
315
316 Level: beginner
317
318 .seealso: [](sec:rg), `RGCreate()`, `RGViewFromOptions()`
319 @*/
320 209 PetscErrorCode RGView(RG rg,PetscViewer viewer)
321 {
322 209 PetscBool isdraw,isascii;
323
324
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
209 PetscFunctionBegin;
325
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.
209 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
326
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.
209 if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)rg),&viewer));
327
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.
209 PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2);
328
13/32
✓ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
209 PetscCheckSameComm(rg,1,viewer,2);
329
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.
209 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw));
330
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.
209 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
331
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
209 if (isascii) {
332
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.
169 PetscCall(PetscObjectPrintClassNamePrefixType((PetscObject)rg,viewer));
333
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.
169 PetscCall(PetscViewerASCIIPushTab(viewer));
334
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
169 PetscTryTypeMethod(rg,view,viewer);
335
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.
169 PetscCall(PetscViewerASCIIPopTab(viewer));
336
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
169 if (rg->complement) PetscCall(PetscViewerASCIIPrintf(viewer," selected region is the complement of the specified one\n"));
337
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.
169 if (rg->sfactor!=1.0) PetscCall(PetscViewerASCIIPrintf(viewer," scaling factor = %g\n",(double)rg->sfactor));
338
6/10
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
40 } else if (isdraw) PetscTryTypeMethod(rg,view,viewer);
339
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.
37 PetscFunctionReturn(PETSC_SUCCESS);
340 }
341
342 /*@
343 RGViewFromOptions - View (print) an `RG` object based on values in the options database.
344
345 Collective
346
347 Input Parameters:
348 + rg - the region context
349 . obj - optional object that provides the options prefix used to query the options database
350 - name - command line option
351
352 Level: intermediate
353
354 .seealso: [](sec:rg), `RGView()`, `RGCreate()`, `PetscObjectViewFromOptions()`
355 @*/
356 13827 PetscErrorCode RGViewFromOptions(RG rg,PetscObject obj,const char name[])
357 {
358
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13827 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.
13827 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
360
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.
13827 PetscCall(PetscObjectViewFromOptions((PetscObject)rg,obj,name));
361
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.
2666 PetscFunctionReturn(PETSC_SUCCESS);
362 }
363
364 /*@
365 RGIsTrivial - Whether it is the trivial region (whole complex plane).
366
367 Not Collective
368
369 Input Parameter:
370 . rg - the region context
371
372 Output Parameter:
373 . trivial - true if the region is equal to the whole complex plane, e.g.,
374 an interval region with all four endpoints unbounded or an
375 ellipse with infinite radius.
376
377 Level: beginner
378
379 .seealso: [](sec:rg), `RGCheckInside()`
380 @*/
381 88655 PetscErrorCode RGIsTrivial(RG rg,PetscBool *trivial)
382 {
383
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
88655 PetscFunctionBegin;
384
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.
88655 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
385
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
88655 PetscValidType(rg,1);
386
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.
88655 PetscAssertPointer(trivial,2);
387 88655 *trivial = PETSC_FALSE;
388
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
88655 PetscTryTypeMethod(rg,istrivial,trivial);
389
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.
17277 PetscFunctionReturn(PETSC_SUCCESS);
390 }
391
392 /*@
393 RGCheckInside - Determines if a set of given points are inside the region or not.
394
395 Not Collective
396
397 Input Parameters:
398 + rg - the region context
399 . n - number of points to check
400 . ar - array of real parts
401 - ai - array of imaginary parts
402
403 Output Parameter:
404 . inside - array of results (1=inside, 0=on the contour, -1=outside)
405
406 Notes:
407 The point `a` is expressed as a couple of `PetscScalar` variables `ar`, `ai`.
408 If built with complex scalars, the point is supposed to be stored in `ar`,
409 otherwise `ar`, `ai` contain the real and imaginary parts, respectively.
410
411 If a scaling factor was set, the points are scaled before checking.
412
413 Level: intermediate
414
415 .seealso: [](sec:rg), `RGSetScale()`, `RGSetComplement()`
416 @*/
417 909026 PetscErrorCode RGCheckInside(RG rg,PetscInt n,PetscScalar ar[],PetscScalar ai[],PetscInt inside[])
418 {
419 909026 PetscReal px,py;
420 909026 PetscInt i;
421
422
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
909026 PetscFunctionBegin;
423
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.
909026 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
424
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
909026 PetscValidType(rg,1);
425
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.
909026 PetscAssertPointer(ar,3);
426 #if !defined(PETSC_USE_COMPLEX)
427
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
336126 PetscAssertPointer(ai,4);
428 #endif
429
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.
909026 PetscAssertPointer(inside,5);
430
431
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2733904 for (i=0;i<n;i++) {
432 #if defined(PETSC_USE_COMPLEX)
433 1154160 px = PetscRealPart(ar[i]);
434 1154160 py = PetscImaginaryPart(ar[i]);
435 #else
436 670718 px = ar[i];
437 670718 py = ai[i];
438 #endif
439
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1824878 if (PetscUnlikely(rg->sfactor != 1.0)) {
440 20 px /= rg->sfactor;
441 20 py /= rg->sfactor;
442 }
443
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
1824878 PetscUseTypeMethod(rg,checkinside,px,py,inside+i);
444
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1824878 if (PetscUnlikely(rg->complement)) inside[i] = -inside[i];
445 }
446
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.
181275 PetscFunctionReturn(PETSC_SUCCESS);
447 }
448
449 /*@
450 RGIsAxisymmetric - Determines if the region is symmetric with respect
451 to the real or imaginary axis.
452
453 Not Collective
454
455 Input Parameters:
456 + rg - the region context
457 - vertical - `PETSC_TRUE` if symmetry must be checked against the vertical axis
458
459 Output Parameter:
460 . symm - `PETSC_TRUE` if the region is axisymmetric
461
462 Note:
463 If the vertical argument is true, symmetry is checked with respect to
464 the vertical axis, otherwise with respect to the horizontal axis.
465
466 Level: intermediate
467
468 .seealso: [](sec:rg), `RGCanUseConjugates()`
469 @*/
470 243 PetscErrorCode RGIsAxisymmetric(RG rg,PetscBool vertical,PetscBool *symm)
471 {
472
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
243 PetscFunctionBegin;
473
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.
243 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
474
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
243 PetscValidType(rg,1);
475
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.
243 PetscAssertPointer(symm,3);
476 243 *symm = PETSC_FALSE;
477
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
243 PetscTryTypeMethod(rg,isaxisymmetric,vertical,symm);
478
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.
51 PetscFunctionReturn(PETSC_SUCCESS);
479 }
480
481 /*@
482 RGCanUseConjugates - Used in contour integral methods to determine whether
483 half of integration points can be avoided (use their conjugates).
484
485 Not Collective
486
487 Input Parameters:
488 + rg - the region context
489 - realmats - `PETSC_TRUE` if the problem matrices are real
490
491 Output Parameter:
492 . useconj - whether it is possible to use conjugates
493
494 Notes:
495 If some integration points are the conjugates of other points, then the
496 associated computational cost can be saved. This depends on the problem
497 matrices being real and also the region being symmetric with respect to
498 the horizontal axis. The result is false if using real arithmetic or
499 in the case of a flat region (height equal to zero).
500
501 Level: developer
502
503 .seealso: [](sec:rg), `RGIsAxisymmetric()`
504 @*/
505 557 PetscErrorCode RGCanUseConjugates(RG rg,PetscBool realmats,PetscBool *useconj)
506 {
507 #if defined(PETSC_USE_COMPLEX)
508 432 PetscReal c,d;
509 432 PetscBool isaxisymm;
510 #endif
511
512
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
557 PetscFunctionBegin;
513
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.
557 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
514
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
557 PetscValidType(rg,1);
515
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.
557 PetscAssertPointer(useconj,3);
516 557 *useconj = PETSC_FALSE;
517 #if defined(PETSC_USE_COMPLEX)
518
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
432 if (realmats) {
519
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
128 PetscCall(RGIsAxisymmetric(rg,PETSC_FALSE,&isaxisymm));
520
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
128 if (isaxisymm) {
521
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
123 PetscCall(RGComputeBoundingBox(rg,NULL,NULL,&c,&d));
522
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 1 times.
123 if (c!=d) *useconj = PETSC_TRUE;
523 }
524 }
525 #endif
526
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.
215 PetscFunctionReturn(PETSC_SUCCESS);
527 }
528
529 /*@
530 RGComputeContour - Computes the coordinates of several points lying on the
531 contour of the region.
532
533 Not Collective
534
535 Input Parameters:
536 + rg - the region context
537 - n - number of points to compute
538
539 Output Parameters:
540 + cr - location to store real parts
541 - ci - location to store imaginary parts
542
543 Note:
544 In real scalars, either `cr` or `ci` can be `NULL` (but not both). In complex
545 scalars, the coordinates are stored in `cr`, which cannot be `NULL` (`ci` is
546 not referenced).
547
548 Level: intermediate
549
550 .seealso: [](sec:rg), `RGComputeBoundingBox()`, `RGSetScale()`
551 @*/
552 1080 PetscErrorCode RGComputeContour(RG rg,PetscInt n,PetscScalar cr[],PetscScalar ci[])
553 {
554 1080 PetscInt i;
555
556
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1080 PetscFunctionBegin;
557
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.
1080 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
558
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1080 PetscValidType(rg,1);
559 #if defined(PETSC_USE_COMPLEX)
560
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
753 PetscAssertPointer(cr,3);
561 #else
562
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
327 PetscCheck(cr || ci,PetscObjectComm((PetscObject)rg),PETSC_ERR_SUP,"cr and ci cannot be NULL simultaneously");
563 #endif
564
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1080 PetscCheck(!rg->complement,PetscObjectComm((PetscObject)rg),PETSC_ERR_SUP,"Cannot compute contour of region with complement flag set");
565
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
1080 PetscUseTypeMethod(rg,computecontour,n,cr,ci);
566
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1739726 for (i=0;i<n;i++) {
567
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
1738646 if (cr) cr[i] *= rg->sfactor;
568
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1738646 if (ci) ci[i] *= rg->sfactor;
569 }
570
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.
215 PetscFunctionReturn(PETSC_SUCCESS);
571 }
572
573 /*@
574 RGComputeBoundingBox - Determines the endpoints of a rectangle in the complex plane that
575 contains the region.
576
577 Not Collective
578
579 Input Parameter:
580 . rg - the region context
581
582 Output Parameters:
583 + a - left endpoint of the bounding box in the real axis
584 . b - right endpoint of the bounding box in the real axis
585 . c - bottom endpoint of the bounding box in the imaginary axis
586 - d - top endpoint of the bounding box in the imaginary axis
587
588 Note:
589 The bounding box is defined as $[a,b]\times[c,d]$. In regions that are not bounded (e.g., an
590 open interval) or with the complement flag set, it makes no sense to compute a bounding
591 box, so the return values are infinite.
592
593 Level: intermediate
594
595 .seealso: [](sec:rg), `RGComputeContour()`, `RGSetScale()`, `RGSetComplement()`
596 @*/
597 249 PetscErrorCode RGComputeBoundingBox(RG rg,PetscReal *a,PetscReal *b,PetscReal *c,PetscReal *d)
598 {
599
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
249 PetscFunctionBegin;
600
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.
249 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
601
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
249 PetscValidType(rg,1);
602
603
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
249 if (rg->complement) { /* cannot compute bounding box */
604 if (a) *a = -PETSC_MAX_REAL;
605 if (b) *b = PETSC_MAX_REAL;
606 if (c) *c = -PETSC_MAX_REAL;
607 if (d) *d = PETSC_MAX_REAL;
608 } else {
609
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
249 PetscUseTypeMethod(rg,computebbox,a,b,c,d);
610
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
249 if (a && *a!=-PETSC_MAX_REAL) *a *= rg->sfactor;
611
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
249 if (b && *b!= PETSC_MAX_REAL) *b *= rg->sfactor;
612
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
249 if (c && *c!=-PETSC_MAX_REAL) *c *= rg->sfactor;
613
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
249 if (d && *d!= PETSC_MAX_REAL) *d *= rg->sfactor;
614 }
615
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.
51 PetscFunctionReturn(PETSC_SUCCESS);
616 }
617
618 /*@
619 RGComputeQuadrature - Computes the values of the parameters used in a
620 quadrature rule for a contour integral around the boundary of the region.
621
622 Not Collective
623
624 Input Parameters:
625 + rg - the region context
626 . quad - the type of quadrature
627 - n - number of quadrature points to compute
628
629 Output Parameters:
630 + z - quadrature points
631 . zn - normalized quadrature points
632 - w - quadrature weights
633
634 Notes:
635 In complex scalars, the values returned in `z` are often the same as those
636 computed by `RGComputeContour()`, but this is not the case in real scalars
637 where all output arguments are real.
638
639 The computed values change for different quadrature rules.
640
641 Level: advanced
642
643 .seealso: [](sec:rg), `RGComputeContour()`
644 @*/
645 670 PetscErrorCode RGComputeQuadrature(RG rg,RGQuadRule quad,PetscInt n,PetscScalar z[],PetscScalar zn[],PetscScalar w[])
646 {
647
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
670 PetscFunctionBegin;
648
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.
670 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
649
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
670 PetscValidType(rg,1);
650
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.
670 PetscAssertPointer(z,4);
651
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.
670 PetscAssertPointer(zn,5);
652
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.
670 PetscAssertPointer(w,6);
653
654
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.
670 PetscCall(RGComputeContour(rg,n,z,NULL));
655
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
670 PetscUseTypeMethod(rg,computequadrature,quad,n,z,zn,w);
656
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.
139 PetscFunctionReturn(PETSC_SUCCESS);
657 }
658
659 /*@
660 RGSetComplement - Sets a flag to indicate that the region is the complement
661 of the specified one.
662
663 Logically Collective
664
665 Input Parameters:
666 + rg - the region context
667 - flg - the boolean flag
668
669 Options Database Key:
670 . -rg_complement (true|false) - activate/deactivate complementing of the region
671
672 Level: intermediate
673
674 .seealso: [](sec:rg), `RGGetComplement()`
675 @*/
676 10 PetscErrorCode RGSetComplement(RG rg,PetscBool flg)
677 {
678
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10 PetscFunctionBegin;
679
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.
10 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
680
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.
10 PetscValidLogicalCollectiveBool(rg,flg,2);
681 10 rg->complement = flg;
682
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.
10 PetscFunctionReturn(PETSC_SUCCESS);
683 }
684
685 /*@
686 RGGetComplement - Gets a flag that indicates whether the region
687 is complemented or not.
688
689 Not Collective
690
691 Input Parameter:
692 . rg - the region context
693
694 Output Parameter:
695 . flg - the flag
696
697 Level: intermediate
698
699 .seealso: [](sec:rg), `RGSetComplement()`
700 @*/
701 537 PetscErrorCode RGGetComplement(RG rg,PetscBool *flg)
702 {
703
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
537 PetscFunctionBegin;
704
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.
537 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
705
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.
537 PetscAssertPointer(flg,2);
706 537 *flg = rg->complement;
707
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.
537 PetscFunctionReturn(PETSC_SUCCESS);
708 }
709
710 /*@
711 RGSetScale - Sets the scaling factor to be used when checking that a
712 point is inside the region and when computing the contour.
713
714 Logically Collective
715
716 Input Parameters:
717 + rg - the region context
718 - sfactor - the scaling factor
719
720 Options Database Key:
721 . -rg_scale sfactor - sets the scaling factor
722
723 Level: intermediate
724
725 .seealso: [](sec:rg), `RGGetScale()`, `RGCheckInside()`, `RGComputeContour()`
726 @*/
727 10 PetscErrorCode RGSetScale(RG rg,PetscReal sfactor)
728 {
729
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10 PetscFunctionBegin;
730
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.
10 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
731
29/66
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ 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 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
10 PetscValidLogicalCollectiveReal(rg,sfactor,2);
732
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
10 if (sfactor == (PetscReal)PETSC_DEFAULT || sfactor == (PetscReal)PETSC_DECIDE) sfactor = 1.0;
733
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
10 PetscCheck(sfactor>0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of scaling factor. Must be > 0");
734 10 rg->sfactor = sfactor;
735
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.
10 PetscFunctionReturn(PETSC_SUCCESS);
736 }
737
738 /*@
739 RGGetScale - Gets the scaling factor.
740
741 Not Collective
742
743 Input Parameter:
744 . rg - the region context
745
746 Output Parameter:
747 . sfactor - the scaling factor
748
749 Level: intermediate
750
751 .seealso: [](sec:rg), `RGSetScale()`
752 @*/
753 965 PetscErrorCode RGGetScale(RG rg,PetscReal *sfactor)
754 {
755
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
965 PetscFunctionBegin;
756
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.
965 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
757
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.
965 PetscAssertPointer(sfactor,2);
758 965 *sfactor = rg->sfactor;
759
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.
965 PetscFunctionReturn(PETSC_SUCCESS);
760 }
761
762 /*@
763 RGPushScale - Sets an additional scaling factor, that will multiply the
764 user-defined scaling factor.
765
766 Logically Collective
767
768 Input Parameters:
769 + rg - the region context
770 - sfactor - the scaling factor
771
772 Notes:
773 The current implementation does not allow pushing several scaling factors.
774
775 This is intended for internal use, for instance in polynomial eigensolvers
776 that use parameter scaling.
777
778 Level: developer
779
780 .seealso: [](sec:rg), `RGPopScale()`, `RGSetScale()`
781 @*/
782 905 PetscErrorCode RGPushScale(RG rg,PetscReal sfactor)
783 {
784
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
905 PetscFunctionBegin;
785
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.
905 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
786
29/66
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ 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 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
905 PetscValidLogicalCollectiveReal(rg,sfactor,2);
787
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
905 PetscCheck(sfactor>0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of scaling factor. Must be > 0");
788
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
905 PetscCheck(!rg->osfactor,PetscObjectComm((PetscObject)rg),PETSC_ERR_SUP,"Current implementation does not allow pushing several scaling factors");
789 905 rg->osfactor = rg->sfactor;
790 905 rg->sfactor *= sfactor;
791
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.
905 PetscFunctionReturn(PETSC_SUCCESS);
792 }
793
794 /*@
795 RGPopScale - Pops the scaling factor set with `RGPushScale()`.
796
797 Logically Collective
798
799 Input Parameter:
800 . rg - the region context
801
802 Level: developer
803
804 .seealso: [](sec:rg), `RGPushScale()`
805 @*/
806 905 PetscErrorCode RGPopScale(RG rg)
807 {
808
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
905 PetscFunctionBegin;
809
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.
905 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
810
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
905 PetscCheck(rg->osfactor,PetscObjectComm((PetscObject)rg),PETSC_ERR_ORDER,"Must call RGPushScale first");
811 905 rg->sfactor = rg->osfactor;
812 905 rg->osfactor = 0.0;
813
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.
905 PetscFunctionReturn(PETSC_SUCCESS);
814 }
815
816 /*@
817 RGDestroy - Destroys `RG` context that was created with `RGCreate()`.
818
819 Collective
820
821 Input Parameter:
822 . rg - the region context
823
824 Level: beginner
825
826 .seealso: [](sec:rg), `RGCreate()`
827 @*/
828 11739 PetscErrorCode RGDestroy(RG *rg)
829 {
830
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11739 PetscFunctionBegin;
831
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.
11739 if (!*rg) PetscFunctionReturn(PETSC_SUCCESS);
832
2/12
✗ 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 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
11105 PetscValidHeaderSpecific(*rg,RG_CLASSID,1);
833
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.
11105 if (--((PetscObject)*rg)->refct > 0) { *rg = NULL; PetscFunctionReturn(PETSC_SUCCESS); }
834
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
10861 PetscTryTypeMethod(*rg,destroy);
835
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.
10861 PetscCall(PetscHeaderDestroy(rg));
836
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.
2099 PetscFunctionReturn(PETSC_SUCCESS);
837 }
838
839 /*@C
840 RGRegister - Adds a region to the `RG` package.
841
842 Not Collective
843
844 Input Parameters:
845 + name - name of a new user-defined RG
846 - function - routine to create context
847
848 Note:
849 `RGRegister()` may be called multiple times to add several user-defined regions.
850
851 Level: advanced
852
853 .seealso: [](sec:rg), `RGRegisterAll()`
854 @*/
855 37008 PetscErrorCode RGRegister(const char *name,PetscErrorCode (*function)(RG))
856 {
857
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
37008 PetscFunctionBegin;
858
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.
37008 PetscCall(RGInitializePackage());
859
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.
37008 PetscCall(PetscFunctionListAdd(&RGList,name,function));
860
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.
7196 PetscFunctionReturn(PETSC_SUCCESS);
861 }
862