GCC Code Coverage Report


Directory: ./
File: src/sys/classes/rg/impls/polygon/rgpolygon.c
Date: 2025-10-03 04:28:47
Exec Total Coverage
Lines: 246 252 97.6%
Functions: 13 13 100.0%
Branches: 408 788 51.8%

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 Polygonal region defined by a set of vertices
12 */
13
14 #include <slepc/private/rgimpl.h> /*I "slepcrg.h" I*/
15 #include <petscdraw.h>
16
17 #define VERTMAX 30
18
19 typedef struct {
20 PetscInt n; /* number of vertices */
21 PetscScalar *vr,*vi; /* array of vertices (vi not used in complex scalars) */
22 } RG_POLYGON;
23
24 static PetscErrorCode RGComputeBoundingBox_Polygon(RG,PetscReal*,PetscReal*,PetscReal*,PetscReal*);
25
26 #if !defined(PETSC_USE_COMPLEX)
27 12 static PetscBool CheckSymmetry(PetscInt n,PetscScalar *vr,PetscScalar *vi)
28 {
29 12 PetscInt i,j,k;
30 /* find change of sign in imaginary part */
31 12 j = vi[0]!=0.0? 0: 1;
32
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
12 for (k=j+1;k<n;k++) {
33
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
12 if (vi[k]!=0.0) {
34
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
12 if (vi[k]*vi[j]<0.0) break;
35 j++;
36 }
37 }
38
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
12 if (k==n) return (j==1)? PETSC_TRUE: PETSC_FALSE;
39 /* check pairing vertices */
40
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
48 for (i=0;i<n/2;i++) {
41
2/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
36 if (vr[k]!=vr[j] || vi[k]!=-vi[j]) return PETSC_FALSE;
42 36 k = (k+1)%n;
43 36 j = (j-1+n)%n;
44 }
45 return PETSC_TRUE;
46 }
47 #endif
48
49 29 static PetscErrorCode RGPolygonSetVertices_Polygon(RG rg,PetscInt n,PetscScalar *vr,PetscScalar *vi)
50 {
51 29 PetscInt i;
52 29 RG_POLYGON *ctx = (RG_POLYGON*)rg->data;
53
54
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
29 PetscFunctionBegin;
55
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
29 PetscCheck(n>2,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"At least 3 vertices required, you provided %" PetscInt_FMT,n);
56
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
29 PetscCheck(n<=VERTMAX,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"Too many points, maximum allowed is %d",VERTMAX);
57 #if !defined(PETSC_USE_COMPLEX)
58
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
12 PetscCheck(CheckSymmetry(n,vr,vi),PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"In real scalars the region must be symmetric wrt real axis");
59 #endif
60
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
29 if (ctx->n) {
61 PetscCall(PetscFree(ctx->vr));
62 #if !defined(PETSC_USE_COMPLEX)
63 PetscCall(PetscFree(ctx->vi));
64 #endif
65 }
66 29 ctx->n = n;
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.
29 PetscCall(PetscMalloc1(n,&ctx->vr));
68 #if !defined(PETSC_USE_COMPLEX)
69
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.
12 PetscCall(PetscMalloc1(n,&ctx->vi));
70 #endif
71
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
223 for (i=0;i<n;i++) {
72 194 ctx->vr[i] = vr[i];
73 #if !defined(PETSC_USE_COMPLEX)
74 84 ctx->vi[i] = vi[i];
75 #endif
76 }
77
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.
5 PetscFunctionReturn(PETSC_SUCCESS);
78 }
79
80 /*@
81 RGPolygonSetVertices - Sets the vertices that define the polygon region.
82
83 Logically Collective
84
85 Input Parameters:
86 + rg - the region context
87 . n - number of vertices
88 . vr - array of vertices
89 - vi - array of vertices (imaginary part)
90
91 Options Database Keys:
92 + -rg_polygon_vertices - Sets the vertices
93 - -rg_polygon_verticesi - Sets the vertices (imaginary part)
94
95 Notes:
96 In the case of complex scalars, only argument vr is used, containing
97 the complex vertices; the list of vertices can be provided in the
98 command line with a comma-separated list of complex values
99 [+/-][realnumber][+/-]realnumberi with no spaces.
100
101 When PETSc is built with real scalars, the real and imaginary parts of
102 the vertices must be provided in two separate arrays (or two lists in
103 the command line). In this case, the region must be symmetric with
104 respect to the real axis.
105
106 Level: advanced
107
108 .seealso: RGPolygonGetVertices()
109 @*/
110 29 PetscErrorCode RGPolygonSetVertices(RG rg,PetscInt n,PetscScalar vr[],PetscScalar vi[])
111 {
112
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
29 PetscFunctionBegin;
113
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.
29 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
114
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.
29 PetscValidLogicalCollectiveInt(rg,n,2);
115
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.
29 PetscAssertPointer(vr,3);
116 #if !defined(PETSC_USE_COMPLEX)
117
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.
12 PetscAssertPointer(vi,4);
118 #endif
119
8/14
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 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.
29 PetscTryMethod(rg,"RGPolygonSetVertices_C",(RG,PetscInt,PetscScalar*,PetscScalar*),(rg,n,vr,vi));
120
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.
29 PetscFunctionReturn(PETSC_SUCCESS);
121 }
122
123 20 static PetscErrorCode RGPolygonGetVertices_Polygon(RG rg,PetscInt *n,PetscScalar *vr[],PetscScalar *vi[])
124 {
125 20 RG_POLYGON *ctx = (RG_POLYGON*)rg->data;
126 20 PetscInt i;
127
128
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
20 PetscFunctionBegin;
129
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
20 if (n) *n = ctx->n;
130
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
20 if (vr) {
131
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
20 if (!ctx->n) *vr = NULL;
132 else {
133
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
20 PetscCall(PetscMalloc1(ctx->n,vr));
134
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
160 for (i=0;i<ctx->n;i++) (*vr)[i] = ctx->vr[i];
135 }
136 }
137 #if !defined(PETSC_USE_COMPLEX)
138
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
10 if (vi) {
139
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
10 if (!ctx->n) *vi = NULL;
140 else {
141
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.
10 PetscCall(PetscMalloc1(ctx->n,vi));
142
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
80 for (i=0;i<ctx->n;i++) (*vi)[i] = ctx->vi[i];
143 }
144 }
145 #endif
146
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.
4 PetscFunctionReturn(PETSC_SUCCESS);
147 }
148
149 /*@C
150 RGPolygonGetVertices - Gets the vertices that define the polygon region.
151
152 Not Collective
153
154 Input Parameter:
155 . rg - the region context
156
157 Output Parameters:
158 + n - number of vertices
159 . vr - array of vertices
160 - vi - array of vertices (imaginary part)
161
162 Notes:
163 The values passed by user with RGPolygonSetVertices() are returned (or null
164 pointers otherwise).
165 The returned arrays should be freed by the user when no longer needed.
166
167 Level: advanced
168
169 .seealso: RGPolygonSetVertices()
170 @*/
171 20 PetscErrorCode RGPolygonGetVertices(RG rg,PetscInt *n,PetscScalar *vr[],PetscScalar *vi[]) PeNS
172 {
173
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
20 PetscFunctionBegin;
174
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.
20 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
175
9/16
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ 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.
20 PetscUseMethod(rg,"RGPolygonGetVertices_C",(RG,PetscInt*,PetscScalar**,PetscScalar**),(rg,n,vr,vi));
176
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.
20 PetscFunctionReturn(PETSC_SUCCESS);
177 }
178
179 36 static PetscErrorCode RGView_Polygon(RG rg,PetscViewer viewer)
180 {
181 36 RG_POLYGON *ctx = (RG_POLYGON*)rg->data;
182 36 PetscBool isdraw,isascii;
183 36 int winw,winh;
184 36 PetscDraw draw;
185 36 PetscDrawAxis axis;
186 36 PetscReal a,b,c,d,ab,cd,lx,ly,w,x0,y0,x1,y1,scale=1.2;
187 36 PetscInt i;
188 36 char str[50];
189
190
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
36 PetscFunctionBegin;
191
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.
36 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw));
192
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.
36 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
193
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
36 if (isascii) {
194
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.
26 PetscCall(PetscViewerASCIIPrintf(viewer," vertices: "));
195
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.
26 PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE));
196
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
208 for (i=0;i<ctx->n;i++) {
197 #if defined(PETSC_USE_COMPLEX)
198
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.
98 PetscCall(SlepcSNPrintfScalar(str,sizeof(str),ctx->vr[i],PETSC_FALSE));
199 #else
200
6/8
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
84 if (ctx->vi[i]!=0.0) PetscCall(PetscSNPrintf(str,sizeof(str),"%g%+gi",(double)ctx->vr[i],(double)ctx->vi[i]));
201
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.
12 else PetscCall(PetscSNPrintf(str,sizeof(str),"%g",(double)ctx->vr[i]));
202 #endif
203
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.
208 PetscCall(PetscViewerASCIIPrintf(viewer,"%s%s",str,(i<ctx->n-1)?", ":""));
204 }
205
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.
26 PetscCall(PetscViewerASCIIPrintf(viewer,"\n"));
206
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.
26 PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_TRUE));
207
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 } else if (isdraw) {
208
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.
10 PetscCall(PetscViewerDrawGetDraw(viewer,0,&draw));
209
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.
10 PetscCall(PetscDrawCheckResizedWindow(draw));
210
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.
10 PetscCall(PetscDrawGetWindowSize(draw,&winw,&winh));
211 10 winw = PetscMax(winw,1); winh = PetscMax(winh,1);
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.
10 PetscCall(PetscDrawClear(draw));
213
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.
10 PetscCall(PetscDrawSetTitle(draw,"Polygonal region"));
214
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.
10 PetscCall(PetscDrawAxisCreate(draw,&axis));
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.
10 PetscCall(RGComputeBoundingBox_Polygon(rg,&a,&b,&c,&d));
216 10 a *= rg->sfactor;
217 10 b *= rg->sfactor;
218 10 c *= rg->sfactor;
219 10 d *= rg->sfactor;
220 10 lx = b-a;
221 10 ly = d-c;
222 10 ab = (a+b)/2;
223 10 cd = (c+d)/2;
224
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 w = scale*PetscMax(lx/winw,ly/winh)/2;
225
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.
10 PetscCall(PetscDrawAxisSetLimits(axis,ab-w*winw,ab+w*winw,cd-w*winh,cd+w*winh));
226
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.
10 PetscCall(PetscDrawAxisDraw(axis));
227
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.
10 PetscCall(PetscDrawAxisDestroy(&axis));
228
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
80 for (i=0;i<ctx->n;i++) {
229 #if defined(PETSC_USE_COMPLEX)
230 35 x0 = PetscRealPart(ctx->vr[i]); y0 = PetscImaginaryPart(ctx->vr[i]);
231
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
35 if (i<ctx->n-1) {
232 30 x1 = PetscRealPart(ctx->vr[i+1]); y1 = PetscImaginaryPart(ctx->vr[i+1]);
233 } else {
234 5 x1 = PetscRealPart(ctx->vr[0]); y1 = PetscImaginaryPart(ctx->vr[0]);
235 }
236 #else
237 35 x0 = ctx->vr[i]; y0 = ctx->vi[i];
238
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
35 if (i<ctx->n-1) {
239 30 x1 = ctx->vr[i+1]; y1 = ctx->vi[i+1];
240 } else {
241 5 x1 = ctx->vr[0]; y1 = ctx->vi[0];
242 }
243 #endif
244
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.
70 PetscCall(PetscDrawLine(draw,x0*rg->sfactor,y0*rg->sfactor,x1*rg->sfactor,y1*rg->sfactor,PETSC_DRAW_MAGENTA));
245 }
246
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.
10 PetscCall(PetscDrawFlush(draw));
247
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.
10 PetscCall(PetscDrawSave(draw));
248
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.
10 PetscCall(PetscDrawPause(draw));
249 }
250
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.
6 PetscFunctionReturn(PETSC_SUCCESS);
251 }
252
253 58 static PetscErrorCode RGIsTrivial_Polygon(RG rg,PetscBool *trivial)
254 {
255 58 RG_POLYGON *ctx = (RG_POLYGON*)rg->data;
256
257
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
58 PetscFunctionBegin;
258 58 *trivial = PetscNot(ctx->n);
259
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.
58 PetscFunctionReturn(PETSC_SUCCESS);
260 }
261
262 23 static PetscErrorCode RGComputeContour_Polygon(RG rg,PetscInt n,PetscScalar *ucr,PetscScalar *uci)
263 {
264 23 RG_POLYGON *ctx = (RG_POLYGON*)rg->data;
265 23 PetscReal length,h,d,rem=0.0;
266 23 PetscInt k=1,idx=ctx->n-1,i;
267 23 PetscBool ini=PETSC_FALSE;
268 23 PetscScalar incr,*cr=ucr,*ci=uci;
269 #if !defined(PETSC_USE_COMPLEX)
270 10 PetscScalar inci;
271 #endif
272
273
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
23 PetscFunctionBegin;
274
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
23 PetscCheck(ctx->n,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONGSTATE,"No vertices have been set yet");
275 23 length = SlepcAbsEigenvalue(ctx->vr[0]-ctx->vr[ctx->n-1],ctx->vi[0]-ctx->vi[ctx->n-1]);
276
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
162 for (i=0;i<ctx->n-1;i++) length += SlepcAbsEigenvalue(ctx->vr[i]-ctx->vr[i+1],ctx->vi[i]-ctx->vi[i+1]);
277 23 h = length/n;
278
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.
23 if (!ucr) PetscCall(PetscMalloc1(n,&cr));
279
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.
23 if (!uci) PetscCall(PetscMalloc1(n,&ci));
280 23 cr[0] = ctx->vr[0];
281 #if !defined(PETSC_USE_COMPLEX)
282 10 ci[0] = ctx->vi[0];
283 #endif
284 23 incr = ctx->vr[ctx->n-1]-ctx->vr[0];
285 #if !defined(PETSC_USE_COMPLEX)
286 10 inci = ctx->vi[ctx->n-1]-ctx->vi[0];
287 #endif
288 23 d = SlepcAbsEigenvalue(incr,inci);
289 23 incr /= d;
290 #if !defined(PETSC_USE_COMPLEX)
291 10 inci /= d;
292 #endif
293
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
629 while (k<n) {
294
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
606 if (ini) {
295 129 incr = ctx->vr[idx]-ctx->vr[idx+1];
296 #if !defined(PETSC_USE_COMPLEX)
297 60 inci = ctx->vi[idx]-ctx->vi[idx+1];
298 #endif
299 129 d = SlepcAbsEigenvalue(incr,inci);
300 129 incr /= d;
301 #if !defined(PETSC_USE_COMPLEX)
302 60 inci /= d;
303 #endif
304
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
129 if (rem+d>h) {
305 129 cr[k] = ctx->vr[idx+1]+incr*(h-rem);
306 #if !defined(PETSC_USE_COMPLEX)
307 60 ci[k] = ctx->vi[idx+1]+inci*(h-rem);
308 #endif
309 129 k++;
310 129 ini = PETSC_FALSE;
311 } else {rem += d; idx--;}
312 } else {
313 #if !defined(PETSC_USE_COMPLEX)
314 90 rem = SlepcAbsEigenvalue(ctx->vr[idx]-cr[k-1],ctx->vi[idx]-ci[k-1]);
315 #else
316 387 rem = PetscAbsScalar(ctx->vr[idx]-cr[k-1]);
317 #endif
318
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
477 if (rem>h) {
319 348 cr[k] = cr[k-1]+incr*h;
320 #if !defined(PETSC_USE_COMPLEX)
321 30 ci[k] = ci[k-1]+inci*h;
322 #endif
323 348 k++;
324 129 } else {ini = PETSC_TRUE; idx--;}
325 }
326 }
327
1/10
✗ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
23 if (!ucr) PetscCall(PetscFree(cr));
328
1/10
✗ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
23 if (!uci) PetscCall(PetscFree(ci));
329
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
5 PetscFunctionReturn(PETSC_SUCCESS);
330 }
331
332 30 static PetscErrorCode RGComputeBoundingBox_Polygon(RG rg,PetscReal *a,PetscReal *b,PetscReal *c,PetscReal *d)
333 {
334 30 RG_POLYGON *ctx = (RG_POLYGON*)rg->data;
335 30 PetscInt i;
336
337
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
30 PetscFunctionBegin;
338
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 if (a) *a = PETSC_MAX_REAL;
339
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 if (b) *b = -PETSC_MAX_REAL;
340
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 if (c) *c = PETSC_MAX_REAL;
341
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 if (d) *d = -PETSC_MAX_REAL;
342
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
240 for (i=0;i<ctx->n;i++) {
343 #if defined(PETSC_USE_COMPLEX)
344
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
120 if (a) *a = PetscMin(*a,PetscRealPart(ctx->vr[i]));
345
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
120 if (b) *b = PetscMax(*b,PetscRealPart(ctx->vr[i]));
346
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
150 if (c) *c = PetscMin(*c,PetscImaginaryPart(ctx->vr[i]));
347
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
165 if (d) *d = PetscMax(*d,PetscImaginaryPart(ctx->vr[i]));
348 #else
349
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
135 if (a) *a = PetscMin(*a,ctx->vr[i]);
350
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
150 if (b) *b = PetscMax(*b,ctx->vr[i]);
351
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
150 if (c) *c = PetscMin(*c,ctx->vi[i]);
352
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
195 if (d) *d = PetscMax(*d,ctx->vi[i]);
353 #endif
354 }
355
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.
30 PetscFunctionReturn(PETSC_SUCCESS);
356 }
357
358 17858 static PetscErrorCode RGCheckInside_Polygon(RG rg,PetscReal px,PetscReal py,PetscInt *inout)
359 {
360 17858 RG_POLYGON *ctx = (RG_POLYGON*)rg->data;
361 17858 PetscReal val,x[VERTMAX],y[VERTMAX];
362 17858 PetscBool mx,my,nx,ny;
363 17858 PetscInt i,j;
364
365
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
17858 PetscFunctionBegin;
366
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
89368 for (i=0;i<ctx->n;i++) {
367 #if defined(PETSC_USE_COMPLEX)
368 71426 x[i] = PetscRealPart(ctx->vr[i])-px;
369 71426 y[i] = PetscImaginaryPart(ctx->vr[i])-py;
370 #else
371 84 x[i] = ctx->vr[i]-px;
372 84 y[i] = ctx->vi[i]-py;
373 #endif
374 }
375 17858 *inout = -1;
376
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
89368 for (i=0;i<ctx->n;i++) {
377 71510 j = (i+1)%ctx->n;
378 71510 mx = PetscNot(x[i]<0.0);
379 71510 nx = PetscNot(x[j]<0.0);
380 71510 my = PetscNot(y[i]<0.0);
381 71510 ny = PetscNot(y[j]<0.0);
382
6/6
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 5 times.
71510 if (!((my||ny) && (mx||nx)) || (mx&&nx)) continue;
383
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
6817 if (((my && ny && (mx||nx)) && (!(mx&&nx)))) {
384 5879 *inout = -*inout;
385 5879 continue;
386 }
387 938 val = (y[i]*x[j]-x[i]*y[j])/(x[j]-x[i]);
388
3/4
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
938 if (PetscAbs(val)<10*PETSC_MACHINE_EPSILON) {
389 *inout = 0;
390 PetscFunctionReturn(PETSC_SUCCESS);
391
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
938 } else if (val>0.0) *inout = -*inout;
392 }
393
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
5948 PetscFunctionReturn(PETSC_SUCCESS);
394 }
395
396 29 static PetscErrorCode RGSetFromOptions_Polygon(RG rg,PetscOptionItems PetscOptionsObject)
397 {
398 29 PetscScalar array[VERTMAX];
399 29 PetscInt i,k;
400 29 PetscBool flg,flgi=PETSC_FALSE;
401 #if !defined(PETSC_USE_COMPLEX)
402 12 PetscScalar arrayi[VERTMAX];
403 12 PetscInt ki;
404 #else
405 17 PetscScalar *arrayi=NULL;
406 #endif
407
408
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
29 PetscFunctionBegin;
409
1/12
✗ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
29 PetscOptionsHeadBegin(PetscOptionsObject,"RG Polygon Options");
410
411 29 k = VERTMAX;
412
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
899 for (i=0;i<k;i++) array[i] = 0;
413
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.
29 PetscCall(PetscOptionsScalarArray("-rg_polygon_vertices","Vertices of polygon","RGPolygonSetVertices",array,&k,&flg));
414 #if !defined(PETSC_USE_COMPLEX)
415 12 ki = VERTMAX;
416
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
372 for (i=0;i<ki;i++) arrayi[i] = 0;
417
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.
12 PetscCall(PetscOptionsScalarArray("-rg_polygon_verticesi","Vertices of polygon (imaginary part)","RGPolygonSetVertices",arrayi,&ki,&flgi));
418
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
12 PetscCheck(ki==k,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_SIZ,"The number of real %" PetscInt_FMT " and imaginary %" PetscInt_FMT " parts do not match",k,ki);
419 #endif
420
6/10
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 7 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
29 if (flg || flgi) PetscCall(RGPolygonSetVertices(rg,k,array,arrayi));
421
422
1/14
✗ Branch 0 not taken.
✓ Branch 1 taken 2 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
29 PetscOptionsHeadEnd();
423
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.
5 PetscFunctionReturn(PETSC_SUCCESS);
424 }
425
426 29 static PetscErrorCode RGDestroy_Polygon(RG rg)
427 {
428 29 RG_POLYGON *ctx = (RG_POLYGON*)rg->data;
429
430
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
29 PetscFunctionBegin;
431
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
29 if (ctx->n) {
432
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.
29 PetscCall(PetscFree(ctx->vr));
433 #if !defined(PETSC_USE_COMPLEX)
434
5/8
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
12 PetscCall(PetscFree(ctx->vi));
435 #endif
436 }
437
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.
29 PetscCall(PetscFree(rg->data));
438
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.
29 PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGPolygonSetVertices_C",NULL));
439
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.
29 PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGPolygonGetVertices_C",NULL));
440
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.
5 PetscFunctionReturn(PETSC_SUCCESS);
441 }
442
443 29 SLEPC_EXTERN PetscErrorCode RGCreate_Polygon(RG rg)
444 {
445 29 RG_POLYGON *polygon;
446
447
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
29 PetscFunctionBegin;
448
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.
29 PetscCall(PetscNew(&polygon));
449 29 rg->data = (void*)polygon;
450
451 29 rg->ops->istrivial = RGIsTrivial_Polygon;
452 29 rg->ops->computecontour = RGComputeContour_Polygon;
453 29 rg->ops->computebbox = RGComputeBoundingBox_Polygon;
454 29 rg->ops->checkinside = RGCheckInside_Polygon;
455 29 rg->ops->setfromoptions = RGSetFromOptions_Polygon;
456 29 rg->ops->view = RGView_Polygon;
457 29 rg->ops->destroy = RGDestroy_Polygon;
458
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.
29 PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGPolygonSetVertices_C",RGPolygonSetVertices_Polygon));
459
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.
29 PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGPolygonGetVertices_C",RGPolygonGetVertices_Polygon));
460
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.
5 PetscFunctionReturn(PETSC_SUCCESS);
461 }
462