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 |