GCC Code Coverage Report


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