GCC Code Coverage Report


Directory: ./
File: src/sys/classes/rg/interface/rgbasic.c
Date: 2025-11-19 04:19:03
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 8712 PetscErrorCode RGFinalizePackage(void)
30 {
31
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8712 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.
8712 PetscCall(PetscFunctionListDestroy(&RGList));
33 8712 RGPackageInitialized = PETSC_FALSE;
34 8712 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.
8712 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 45196 PetscErrorCode RGInitializePackage(void)
51 {
52 45196 char logList[256];
53 45196 PetscBool opt,pkg;
54 45196 PetscClassId classids[1];
55
56
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
45196 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.
45196 if (RGPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
58 8712 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.
8712 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.
8712 PetscCall(RGRegisterAll());
63 /* Process Info */
64 8712 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.
8712 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.
8712 PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
68
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
8712 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.
8712 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.
1704 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 10303 PetscErrorCode RGCreate(MPI_Comm comm,RG *newrg)
93 {
94 10303 RG rg;
95
96
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10303 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.
10303 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.
10303 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.
10303 PetscCall(SlepcHeaderCreate(rg,RG_CLASSID,"RG","Region","RG",comm,RGDestroy,RGView));
100 10303 rg->complement = PETSC_FALSE;
101 10303 rg->sfactor = 1.0;
102 10303 rg->osfactor = 0.0;
103 10303 rg->data = NULL;
104
105 10303 *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.
10303 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 2443 PetscErrorCode RGSetOptionsPrefix(RG rg,const char prefix[])
129 {
130
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2443 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.
2443 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.
2443 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.
470 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 1964 PetscErrorCode RGAppendOptionsPrefix(RG rg,const char prefix[])
155 {
156
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1964 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.
1964 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.
1964 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.
388 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 11058 PetscErrorCode RGSetType(RG rg,RGType type)
204 {
205 11058 PetscErrorCode (*r)(RG);
206 11058 PetscBool match;
207
208
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11058 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.
11058 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.
11058 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.
11058 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.
11058 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.
10429 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.
10429 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.
10429 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.
10429 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.
10429 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.
10429 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.
2023 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 50 PetscErrorCode RGGetType(RG rg,RGType *type)
242 {
243
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
50 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.
50 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.
50 PetscAssertPointer(type,2);
246 50 *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.
50 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 10315 PetscErrorCode RGSetFromOptions(RG rg)
266 {
267 10315 char type[256];
268 10315 PetscBool flg;
269 10315 PetscReal sfactor;
270
271
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10315 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.
10315 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
273
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.
10315 PetscCall(RGRegisterAll());
274
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.
30945 PetscObjectOptionsBegin((PetscObject)rg);
275
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.
11503 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 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.
10315 if (flg) PetscCall(RGSetType(rg,type));
277
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.
9181 else if (!((PetscObject)rg)->type_name) PetscCall(RGSetType(rg,RGINTERVAL));
278
279
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.
10315 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 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10315 PetscCall(PetscOptionsReal("-rg_scale","Scaling factor","RGSetScale",1.0,&sfactor,&flg));
282
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.
10315 if (flg) PetscCall(RGSetScale(rg,sfactor));
283
284
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.
10315 PetscTryTypeMethod(rg,setfromoptions,PetscOptionsObject);
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.
10315 PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)rg,PetscOptionsObject));
286
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.
10315 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.
10315 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 209 PetscErrorCode RGView(RG rg,PetscViewer viewer)
317 {
318 209 PetscBool isdraw,isascii;
319
320
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
209 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.
209 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
322
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));
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.
209 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.
209 PetscCheckSameComm(rg,1,viewer,2);
325
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));
326
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));
327
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
209 if (isascii) {
328
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));
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.
169 PetscCall(PetscViewerASCIIPushTab(viewer));
330
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);
331
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));
332
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"));
333
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));
334
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);
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 13211 PetscErrorCode RGViewFromOptions(RG rg,PetscObject obj,const char name[])
353 {
354
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13211 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.
13211 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
356
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.
13211 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.
2550 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 84866 PetscErrorCode RGIsTrivial(RG rg,PetscBool *trivial)
378 {
379
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
84866 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.
84866 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.
84866 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.
84866 PetscAssertPointer(trivial,2);
383 84866 *trivial = PETSC_FALSE;
384
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.
84866 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.
16380 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 916711 PetscErrorCode RGCheckInside(RG rg,PetscInt n,PetscScalar ar[],PetscScalar ai[],PetscInt inside[])
414 {
415 916711 PetscReal px,py;
416 916711 PetscInt i;
417
418
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
916711 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.
916711 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.
916711 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.
916711 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.
335838 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.
916711 PetscAssertPointer(inside,5);
426
427
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2756950 for (i=0;i<n;i++) {
428 #if defined(PETSC_USE_COMPLEX)
429 1170066 px = PetscRealPart(ar[i]);
430 1170066 py = PetscImaginaryPart(ar[i]);
431 #else
432 670173 px = ar[i];
433 670173 py = ai[i];
434 #endif
435
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1840239 if (PetscUnlikely(rg->sfactor != 1.0)) {
436 20 px /= rg->sfactor;
437 20 py /= rg->sfactor;
438 }
439
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.
1840239 PetscUseTypeMethod(rg,checkinside,px,py,inside+i);
440
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1840239 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.
180910 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 243 PetscErrorCode RGIsAxisymmetric(RG rg,PetscBool vertical,PetscBool *symm)
467 {
468
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
243 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.
243 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.
243 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.
243 PetscAssertPointer(symm,3);
472 243 *symm = PETSC_FALSE;
473
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);
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 557 PetscErrorCode RGCanUseConjugates(RG rg,PetscBool realmats,PetscBool *useconj)
502 {
503 #if defined(PETSC_USE_COMPLEX)
504 432 PetscReal c,d;
505 432 PetscBool isaxisymm;
506 #endif
507
508
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
557 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.
557 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.
557 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.
557 PetscAssertPointer(useconj,3);
512 557 *useconj = PETSC_FALSE;
513 #if defined(PETSC_USE_COMPLEX)
514
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
432 if (realmats) {
515
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));
516
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
128 if (isaxisymm) {
517
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));
518
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 1 times.
123 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.
215 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 1080 PetscErrorCode RGComputeContour(RG rg,PetscInt n,PetscScalar cr[],PetscScalar ci[])
549 {
550 1080 PetscInt i;
551
552
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1080 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.
1080 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.
1080 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.
753 PetscAssertPointer(cr,3);
557 #else
558
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");
559 #endif
560
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");
561
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);
562
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1739726 for (i=0;i<n;i++) {
563
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
1738646 if (cr) cr[i] *= rg->sfactor;
564
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1738646 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 249 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.
249 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.
249 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.
249 PetscValidType(rg,1);
598
599
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
249 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 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);
606
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;
607
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;
608
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;
609
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;
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 670 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.
670 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.
670 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.
670 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.
670 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.
670 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.
670 PetscAssertPointer(w,6);
649
650
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));
651
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);
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 10 PetscErrorCode RGSetComplement(RG rg,PetscBool flg)
673 {
674
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10 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.
10 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.
10 PetscValidLogicalCollectiveBool(rg,flg,2);
677 10 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.
10 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 537 PetscErrorCode RGGetComplement(RG rg,PetscBool *flg)
698 {
699
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
537 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.
537 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.
537 PetscAssertPointer(flg,2);
702 537 *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.
537 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 10 PetscErrorCode RGSetScale(RG rg,PetscReal sfactor)
724 {
725
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10 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.
10 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.
10 PetscValidLogicalCollectiveReal(rg,sfactor,2);
728
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
10 if (sfactor == (PetscReal)PETSC_DEFAULT || sfactor == (PetscReal)PETSC_DECIDE) sfactor = 1.0;
729
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");
730 10 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.
10 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 965 PetscErrorCode RGGetScale(RG rg,PetscReal *sfactor)
750 {
751
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
965 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.
965 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.
965 PetscAssertPointer(sfactor,2);
754 965 *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.
965 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 881 PetscErrorCode RGPushScale(RG rg,PetscReal sfactor)
779 {
780
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
881 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.
881 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.
881 PetscValidLogicalCollectiveReal(rg,sfactor,2);
783
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
881 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 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
881 PetscCheck(!rg->osfactor,PetscObjectComm((PetscObject)rg),PETSC_ERR_SUP,"Current implementation does not allow pushing several scaling factors");
785 881 rg->osfactor = rg->sfactor;
786 881 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.
881 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 881 PetscErrorCode RGPopScale(RG rg)
803 {
804
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
881 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.
881 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
806
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
881 PetscCheck(rg->osfactor,PetscObjectComm((PetscObject)rg),PETSC_ERR_ORDER,"Must call RGPushScale first");
807 881 rg->sfactor = rg->osfactor;
808 881 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.
881 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 11177 PetscErrorCode RGDestroy(RG *rg)
825 {
826
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
11177 PetscFunctionBegin;
827
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.
11177 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.
10545 PetscValidHeaderSpecific(*rg,RG_CLASSID,1);
829
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.
10545 if (--((PetscObject)*rg)->refct > 0) { *rg = NULL; PetscFunctionReturn(PETSC_SUCCESS); }
830
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.
10303 PetscTryTypeMethod(*rg,destroy);
831
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.
10303 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.
1999 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 34848 PetscErrorCode RGRegister(const char *name,PetscErrorCode (*function)(RG))
852 {
853
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
34848 PetscFunctionBegin;
854
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.
34848 PetscCall(RGInitializePackage());
855
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.
34848 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.
6816 PetscFunctionReturn(PETSC_SUCCESS);
857 }
858