GCC Code Coverage Report


Directory: ./
File: src/sys/classes/rg/impls/ellipse/rgellipse.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 166 168 98.8%
Functions: 14 14 100.0%
Branches: 364 714 51.0%

Line Branch Exec Source
1 /*
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 SLEPc - Scalable Library for Eigenvalue Problem Computations
4 Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
5
6 This file is part of SLEPc.
7 SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9 */
10 /*
11 Region enclosed in an ellipse (aligned with the coordinate axes)
12 */
13
14 #include <slepc/private/rgimpl.h> /*I "slepcrg.h" I*/
15 #include <petscdraw.h>
16
17 typedef struct {
18 PetscScalar center; /* center of the ellipse */
19 PetscReal radius; /* radius of the ellipse */
20 PetscReal vscale; /* vertical scale of the ellipse */
21 } RG_ELLIPSE;
22
23 866 static PetscErrorCode RGEllipseSetParameters_Ellipse(RG rg,PetscScalar center,PetscReal radius,PetscReal vscale)
24 {
25 866 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
26
27
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
866 PetscFunctionBegin;
28 866 ctx->center = center;
29
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
866 if (radius == (PetscReal)PETSC_DETERMINE) {
30 ctx->radius = 1.0;
31
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
866 } else if (radius != (PetscReal)PETSC_CURRENT) {
32
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
866 PetscCheck(radius>0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The radius argument must be > 0.0");
33 866 ctx->radius = radius;
34 }
35
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
866 if (vscale == (PetscReal)PETSC_DETERMINE) {
36 ctx->vscale = 1.0;
37
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
866 } else if (vscale != (PetscReal)PETSC_CURRENT) {
38
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
866 PetscCheck(vscale>0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The vscale argument must be > 0.0");
39 866 ctx->vscale = vscale;
40 }
41
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.
181 PetscFunctionReturn(PETSC_SUCCESS);
42 }
43
44 /*@
45 RGEllipseSetParameters - Sets the parameters defining the ellipse region.
46
47 Logically Collective
48
49 Input Parameters:
50 + rg - the region context
51 . center - center of the ellipse
52 . radius - radius of the ellipse
53 - vscale - vertical scale of the ellipse
54
55 Options Database Keys:
56 + -rg_ellipse_center - Sets the center
57 . -rg_ellipse_radius - Sets the radius
58 - -rg_ellipse_vscale - Sets the vertical scale
59
60 Notes:
61 In the case of complex scalars, a complex center can be provided in the
62 command line with [+/-][realnumber][+/-]realnumberi with no spaces, e.g.
63 -rg_ellipse_center 1.0+2.0i
64
65 When PETSc is built with real scalars, the center is restricted to a real value.
66
67 For radius and vscale, you can use PETSC_CURRENT to keep the current value, and
68 PETSC_DETERMINE to set them to a default of 1.
69
70 Level: advanced
71
72 .seealso: RGEllipseGetParameters()
73 @*/
74 866 PetscErrorCode RGEllipseSetParameters(RG rg,PetscScalar center,PetscReal radius,PetscReal vscale)
75 {
76
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
866 PetscFunctionBegin;
77
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.
866 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
78
30/68
✗ 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 taken 2 times.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
866 PetscValidLogicalCollectiveScalar(rg,center,2);
79
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.
866 PetscValidLogicalCollectiveReal(rg,radius,3);
80
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.
866 PetscValidLogicalCollectiveReal(rg,vscale,4);
81
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.
866 PetscTryMethod(rg,"RGEllipseSetParameters_C",(RG,PetscScalar,PetscReal,PetscReal),(rg,center,radius,vscale));
82
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.
866 PetscFunctionReturn(PETSC_SUCCESS);
83 }
84
85 1365 static PetscErrorCode RGEllipseGetParameters_Ellipse(RG rg,PetscScalar *center,PetscReal *radius,PetscReal *vscale)
86 {
87 1365 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
88
89
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1365 PetscFunctionBegin;
90
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
1365 if (center) *center = ctx->center;
91
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
1365 if (radius) *radius = ctx->radius;
92
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1365 if (vscale) *vscale = ctx->vscale;
93
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.
1365 PetscFunctionReturn(PETSC_SUCCESS);
94 }
95
96 /*@
97 RGEllipseGetParameters - Gets the parameters that define the ellipse region.
98
99 Not Collective
100
101 Input Parameter:
102 . rg - the region context
103
104 Output Parameters:
105 + center - center of the region
106 . radius - radius of the region
107 - vscale - vertical scale of the region
108
109 Level: advanced
110
111 .seealso: RGEllipseSetParameters()
112 @*/
113 1365 PetscErrorCode RGEllipseGetParameters(RG rg,PetscScalar *center,PetscReal *radius,PetscReal *vscale)
114 {
115
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1365 PetscFunctionBegin;
116
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.
1365 PetscValidHeaderSpecific(rg,RG_CLASSID,1);
117
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.
1365 PetscUseMethod(rg,"RGEllipseGetParameters_C",(RG,PetscScalar*,PetscReal*,PetscReal*),(rg,center,radius,vscale));
118
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.
1365 PetscFunctionReturn(PETSC_SUCCESS);
119 }
120
121 51 static PetscErrorCode RGView_Ellipse(RG rg,PetscViewer viewer)
122 {
123 51 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
124 51 PetscBool isdraw,isascii;
125 51 int winw,winh;
126 51 PetscDraw draw;
127 51 PetscDrawAxis axis;
128 51 PetscReal cx,cy,r,ab,cd,lx,ly,w,scale=1.2;
129 51 char str[50];
130
131
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
51 PetscFunctionBegin;
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.
51 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw));
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.
51 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
134
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
51 if (isascii) {
135
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.
41 PetscCall(SlepcSNPrintfScalar(str,sizeof(str),ctx->center,PETSC_FALSE));
136
7/10
✓ 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 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
41 PetscCall(PetscViewerASCIIPrintf(viewer," center: %s, radius: %g, vscale: %g\n",str,RGShowReal(ctx->radius),RGShowReal(ctx->vscale)));
137
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 } else if (isdraw) {
138
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));
139
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));
140
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscDrawGetWindowSize(draw,&winw,&winh));
141 10 winw = PetscMax(winw,1); winh = PetscMax(winh,1);
142
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));
143
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,"Ellipse region"));
144
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscDrawAxisCreate(draw,&axis));
145 10 cx = PetscRealPart(ctx->center)*rg->sfactor;
146 10 cy = PetscImaginaryPart(ctx->center)*rg->sfactor;
147 10 r = ctx->radius*rg->sfactor;
148 10 lx = 2*r;
149 10 ly = 2*r*ctx->vscale;
150 10 ab = cx;
151 10 cd = cy;
152
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
10 w = scale*PetscMax(lx/winw,ly/winh)/2;
153
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));
154
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));
155
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));
156
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(PetscDrawEllipse(draw,cx,cy,2*r,2*r*ctx->vscale,PETSC_DRAW_RED));
157
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));
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.
10 PetscCall(PetscDrawSave(draw));
159
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));
160 }
161
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.
9 PetscFunctionReturn(PETSC_SUCCESS);
162 }
163
164 519 static PetscErrorCode RGIsTrivial_Ellipse(RG rg,PetscBool *trivial)
165 {
166 519 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
167
168
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
519 PetscFunctionBegin;
169
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
519 if (rg->complement) *trivial = PetscNot(ctx->radius);
170 519 else *trivial = PetscNot(ctx->radius<PETSC_MAX_REAL);
171
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.
519 PetscFunctionReturn(PETSC_SUCCESS);
172 }
173
174 588 static PetscErrorCode RGComputeContour_Ellipse(RG rg,PetscInt n,PetscScalar *cr,PetscScalar *ci)
175 {
176 588 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
177 588 PetscReal theta;
178 588 PetscInt i;
179
180
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
588 PetscFunctionBegin;
181
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
22708 for (i=0;i<n;i++) {
182 22120 theta = 2.0*PETSC_PI*(i+0.5)/n;
183 #if defined(PETSC_USE_COMPLEX)
184 19624 cr[i] = ctx->center + ctx->radius*PetscCMPLX(PetscCosReal(theta),ctx->vscale*PetscSinReal(theta));
185 #else
186
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
2496 if (cr) cr[i] = ctx->center + ctx->radius*PetscCosReal(theta);
187
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
2496 if (ci) ci[i] = ctx->radius*ctx->vscale*PetscSinReal(theta);
188 #endif
189 }
190
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.
588 PetscFunctionReturn(PETSC_SUCCESS);
191 }
192
193 143 static PetscErrorCode RGComputeBoundingBox_Ellipse(RG rg,PetscReal *a,PetscReal *b,PetscReal *c,PetscReal *d)
194 {
195 143 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
196
197
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
143 PetscFunctionBegin;
198
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
143 if (a) *a = PetscRealPart(ctx->center) - ctx->radius;
199
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
143 if (b) *b = PetscRealPart(ctx->center) + ctx->radius;
200
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
143 if (c) *c = PetscImaginaryPart(ctx->center) - ctx->radius*ctx->vscale;
201
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
143 if (d) *d = PetscImaginaryPart(ctx->center) + ctx->radius*ctx->vscale;
202
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.
143 PetscFunctionReturn(PETSC_SUCCESS);
203 }
204
205 562 static PetscErrorCode RGComputeQuadrature_Ellipse(RG rg,RGQuadRule quad,PetscInt n,PetscScalar *z,PetscScalar *zn,PetscScalar *w)
206 {
207 562 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
208 562 PetscReal theta;
209 562 PetscInt i;
210
211
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
562 PetscFunctionBegin;
212
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
22422 for (i=0;i<n;i++) {
213 #if defined(PETSC_USE_COMPLEX)
214 19484 theta = 2.0*PETSC_PI*(i+0.5)/n;
215 19484 zn[i] = PetscCMPLX(PetscCosReal(theta),ctx->vscale*PetscSinReal(theta));
216 19484 w[i] = (PetscCMPLX(ctx->vscale*PetscCosReal(theta),PetscSinReal(theta)))*ctx->radius*rg->sfactor/n;
217 #else
218 2376 theta = PETSC_PI*(i+0.5)/n;
219 2376 zn[i] = PetscCosReal(theta);
220 2376 w[i] = PetscCosReal((n-1)*theta)/n;
221 2376 z[i] = rg->sfactor*(ctx->center + ctx->radius*zn[i]);
222 #endif
223 }
224
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
562 PetscFunctionReturn(PETSC_SUCCESS);
225 }
226
227 24388 static PetscErrorCode RGCheckInside_Ellipse(RG rg,PetscReal px,PetscReal py,PetscInt *inside)
228 {
229 24388 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
230 24388 PetscReal dx,dy,r;
231
232
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
24388 PetscFunctionBegin;
233 #if defined(PETSC_USE_COMPLEX)
234 17803 dx = (px-PetscRealPart(ctx->center))/ctx->radius;
235 17803 dy = (py-PetscImaginaryPart(ctx->center))/ctx->radius;
236 #else
237 6585 dx = (px-ctx->center)/ctx->radius;
238 6585 dy = py/ctx->radius;
239 #endif
240 24388 r = 1.0-dx*dx-(dy*dy)/(ctx->vscale*ctx->vscale);
241
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
24388 *inside = PetscSign(r);
242
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.
24388 PetscFunctionReturn(PETSC_SUCCESS);
243 }
244
245 152 static PetscErrorCode RGIsAxisymmetric_Ellipse(RG rg,PetscBool vertical,PetscBool *symm)
246 {
247 152 RG_ELLIPSE *ctx = (RG_ELLIPSE*)rg->data;
248
249
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
152 PetscFunctionBegin;
250
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
152 if (vertical) *symm = (PetscRealPart(ctx->center) == 0.0)? PETSC_TRUE: PETSC_FALSE;
251 137 else *symm = (PetscImaginaryPart(ctx->center) == 0.0)? PETSC_TRUE: PETSC_FALSE;
252
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.
152 PetscFunctionReturn(PETSC_SUCCESS);
253 }
254
255 924 static PetscErrorCode RGSetFromOptions_Ellipse(RG rg,PetscOptionItems PetscOptionsObject)
256 {
257 924 PetscScalar s;
258 924 PetscReal r1,r2;
259 924 PetscBool flg1,flg2,flg3;
260
261
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
924 PetscFunctionBegin;
262
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.
924 PetscOptionsHeadBegin(PetscOptionsObject,"RG Ellipse Options");
263
264
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.
924 PetscCall(RGEllipseGetParameters(rg,&s,&r1,&r2));
265
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.
924 PetscCall(PetscOptionsScalar("-rg_ellipse_center","Center of ellipse","RGEllipseSetParameters",s,&s,&flg1));
266
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.
924 PetscCall(PetscOptionsReal("-rg_ellipse_radius","Radius of ellipse","RGEllipseSetParameters",r1,&r1,&flg2));
267
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.
924 PetscCall(PetscOptionsReal("-rg_ellipse_vscale","Vertical scale of ellipse","RGEllipseSetParameters",r2,&r2,&flg3));
268
9/12
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
924 if (flg1 || flg2 || flg3) PetscCall(RGEllipseSetParameters(rg,s,r1,r2));
269
270
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.
924 PetscOptionsHeadEnd();
271
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.
192 PetscFunctionReturn(PETSC_SUCCESS);
272 }
273
274 525 static PetscErrorCode RGDestroy_Ellipse(RG rg)
275 {
276
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
525 PetscFunctionBegin;
277
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.
525 PetscCall(PetscFree(rg->data));
278
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.
525 PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGEllipseSetParameters_C",NULL));
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.
525 PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGEllipseGetParameters_C",NULL));
280
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.
108 PetscFunctionReturn(PETSC_SUCCESS);
281 }
282
283 525 SLEPC_EXTERN PetscErrorCode RGCreate_Ellipse(RG rg)
284 {
285 525 RG_ELLIPSE *ellipse;
286
287
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
525 PetscFunctionBegin;
288
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.
525 PetscCall(PetscNew(&ellipse));
289 525 ellipse->center = 0.0;
290 525 ellipse->radius = PETSC_MAX_REAL;
291 525 ellipse->vscale = 1.0;
292 525 rg->data = (void*)ellipse;
293
294 525 rg->ops->istrivial = RGIsTrivial_Ellipse;
295 525 rg->ops->computecontour = RGComputeContour_Ellipse;
296 525 rg->ops->computebbox = RGComputeBoundingBox_Ellipse;
297 525 rg->ops->computequadrature = RGComputeQuadrature_Ellipse;
298 525 rg->ops->checkinside = RGCheckInside_Ellipse;
299 525 rg->ops->isaxisymmetric = RGIsAxisymmetric_Ellipse;
300 525 rg->ops->setfromoptions = RGSetFromOptions_Ellipse;
301 525 rg->ops->view = RGView_Ellipse;
302 525 rg->ops->destroy = RGDestroy_Ellipse;
303
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.
525 PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGEllipseSetParameters_C",RGEllipseSetParameters_Ellipse));
304
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.
525 PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGEllipseGetParameters_C",RGEllipseGetParameters_Ellipse));
305
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.
108 PetscFunctionReturn(PETSC_SUCCESS);
306 }
307