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 | Ring region, similar to the ellipse but with a start and end angle, | ||
12 | together with the width | ||
13 | */ | ||
14 | |||
15 | #include <slepc/private/rgimpl.h> /*I "slepcrg.h" I*/ | ||
16 | #include <petscdraw.h> | ||
17 | |||
18 | typedef struct { | ||
19 | PetscScalar center; /* center of the ellipse */ | ||
20 | PetscReal radius; /* radius of the ellipse */ | ||
21 | PetscReal vscale; /* vertical scale of the ellipse */ | ||
22 | PetscReal start_ang; /* start angle */ | ||
23 | PetscReal end_ang; /* end angle */ | ||
24 | PetscReal width; /* ring width */ | ||
25 | } RG_RING; | ||
26 | |||
27 | 146 | static PetscErrorCode RGRingSetParameters_Ring(RG rg,PetscScalar center,PetscReal radius,PetscReal vscale,PetscReal start_ang,PetscReal end_ang,PetscReal width) | |
28 | { | ||
29 | 146 | RG_RING *ctx = (RG_RING*)rg->data; | |
30 | |||
31 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
146 | PetscFunctionBegin; |
32 | 146 | ctx->center = center; | |
33 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
146 | if (radius == (PetscReal)PETSC_DETERMINE) { |
34 | 50 | ctx->radius = 1.0; | |
35 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
96 | } else if (radius != (PetscReal)PETSC_CURRENT) { |
36 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
96 | PetscCheck(radius>0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The radius argument must be > 0.0"); |
37 | 96 | ctx->radius = radius; | |
38 | } | ||
39 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
146 | if (vscale == (PetscReal)PETSC_DETERMINE) { |
40 | ✗ | ctx->vscale = 1.0; | |
41 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
146 | } else if (vscale != (PetscReal)PETSC_CURRENT) { |
42 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | PetscCheck(vscale>0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The vscale argument must be > 0.0"); |
43 | 146 | ctx->vscale = vscale; | |
44 | } | ||
45 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
146 | if (start_ang == (PetscReal)PETSC_DETERMINE) { |
46 | ✗ | ctx->start_ang = 0.0; | |
47 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
146 | } else if (start_ang != (PetscReal)PETSC_CURRENT) { |
48 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | PetscCheck(start_ang>=0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The right-hand side angle argument must be >= 0.0"); |
49 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | PetscCheck(start_ang<=1.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The right-hand side angle argument must be <= 1.0"); |
50 | 146 | ctx->start_ang = start_ang; | |
51 | } | ||
52 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
146 | if (end_ang == (PetscReal)PETSC_DETERMINE) { |
53 | ✗ | ctx->end_ang = 1.0; | |
54 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
146 | } else if (end_ang != (PetscReal)PETSC_CURRENT) { |
55 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | PetscCheck(end_ang>=0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The left-hand side angle argument must be >= 0.0"); |
56 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | PetscCheck(end_ang<=1.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The left-hand side angle argument must be <= 1.0"); |
57 | 146 | ctx->end_ang = end_ang; | |
58 | } | ||
59 | #if !defined(PETSC_USE_COMPLEX) | ||
60 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
55 | PetscCheck(ctx->start_ang+ctx->end_ang==1.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"In real scalars the region must be symmetric wrt real axis"); |
61 | #endif | ||
62 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
146 | if (width == (PetscReal)PETSC_DETERMINE) { |
63 | ✗ | ctx->width = 0.1; | |
64 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
146 | } else if (width != (PetscReal)PETSC_CURRENT) { |
65 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | PetscCheck(width>0.0,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"The width argument must be > 0.0"); |
66 | 146 | ctx->width = width; | |
67 | } | ||
68 |
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); |
69 | } | ||
70 | |||
71 | /*@ | ||
72 | RGRingSetParameters - Sets the parameters defining the ring region. | ||
73 | |||
74 | Logically Collective | ||
75 | |||
76 | Input Parameters: | ||
77 | + rg - the region context | ||
78 | . center - center of the ellipse | ||
79 | . radius - radius of the ellipse | ||
80 | . vscale - vertical scale of the ellipse | ||
81 | . start_ang - the right-hand side angle | ||
82 | . end_ang - the left-hand side angle | ||
83 | - width - width of the ring | ||
84 | |||
85 | Options Database Keys: | ||
86 | + -rg_ring_center - Sets the center | ||
87 | . -rg_ring_radius - Sets the radius | ||
88 | . -rg_ring_vscale - Sets the vertical scale | ||
89 | . -rg_ring_startangle - Sets the right-hand side angle | ||
90 | . -rg_ring_endangle - Sets the left-hand side angle | ||
91 | - -rg_ring_width - Sets the width of the ring | ||
92 | |||
93 | Notes: | ||
94 | The values of center, radius and vscale have the same meaning as in the | ||
95 | ellipse region. The startangle and endangle define the span of the ring | ||
96 | (by default it is the whole ring), while the width is the separation | ||
97 | between the two concentric ellipses (above and below the radius by | ||
98 | width/2). | ||
99 | |||
100 | The start and end angles are expressed as a fraction of the circumference. | ||
101 | The allowed range is [0..1], with 0 corresponding to 0 radians, 0.25 to | ||
102 | pi/2 radians, and so on. It is allowed to have startangle>endangle, in | ||
103 | which case the ring region crosses over the zero angle. | ||
104 | |||
105 | In the case of complex scalars, a complex center can be provided in the | ||
106 | command line with [+/-][realnumber][+/-]realnumberi with no spaces, e.g. | ||
107 | -rg_ring_center 1.0+2.0i | ||
108 | |||
109 | When PETSc is built with real scalars, the center is restricted to a real value, | ||
110 | and the start and end angles must be such that the region is symmetric with | ||
111 | respect to the real axis. | ||
112 | |||
113 | For all arguments except center, you can use PETSC_CURRENT to keep the current | ||
114 | value, and PETSC_DETERMINE to set them to a default value (1 for radius, vscale, | ||
115 | end_ang, 0 for start_and, and 0.1 for width). | ||
116 | |||
117 | Level: advanced | ||
118 | |||
119 | .seealso: RGRingGetParameters() | ||
120 | @*/ | ||
121 | 146 | PetscErrorCode RGRingSetParameters(RG rg,PetscScalar center,PetscReal radius,PetscReal vscale,PetscReal start_ang,PetscReal end_ang,PetscReal width) | |
122 | { | ||
123 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
146 | PetscFunctionBegin; |
124 |
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.
|
146 | PetscValidHeaderSpecific(rg,RG_CLASSID,1); |
125 |
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.
|
146 | PetscValidLogicalCollectiveScalar(rg,center,2); |
126 |
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.
|
146 | PetscValidLogicalCollectiveReal(rg,radius,3); |
127 |
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.
|
146 | PetscValidLogicalCollectiveReal(rg,vscale,4); |
128 |
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.
|
146 | PetscValidLogicalCollectiveReal(rg,start_ang,5); |
129 |
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.
|
146 | PetscValidLogicalCollectiveReal(rg,end_ang,6); |
130 |
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.
|
146 | PetscValidLogicalCollectiveReal(rg,width,7); |
131 |
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.
|
146 | PetscTryMethod(rg,"RGRingSetParameters_C",(RG,PetscScalar,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal),(rg,center,radius,vscale,start_ang,end_ang,width)); |
132 |
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.
|
146 | PetscFunctionReturn(PETSC_SUCCESS); |
133 | } | ||
134 | |||
135 | 176 | static PetscErrorCode RGRingGetParameters_Ring(RG rg,PetscScalar *center,PetscReal *radius,PetscReal *vscale,PetscReal *start_ang,PetscReal *end_ang,PetscReal *width) | |
136 | { | ||
137 | 176 | RG_RING *ctx = (RG_RING*)rg->data; | |
138 | |||
139 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
176 | PetscFunctionBegin; |
140 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
176 | if (center) *center = ctx->center; |
141 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
176 | if (radius) *radius = ctx->radius; |
142 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
176 | if (vscale) *vscale = ctx->vscale; |
143 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
176 | if (start_ang) *start_ang = ctx->start_ang; |
144 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
176 | if (end_ang) *end_ang = ctx->end_ang; |
145 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
|
176 | if (width) *width = ctx->width; |
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.
|
176 | PetscFunctionReturn(PETSC_SUCCESS); |
147 | } | ||
148 | |||
149 | /*@ | ||
150 | RGRingGetParameters - Gets the parameters that define the ring region. | ||
151 | |||
152 | Not Collective | ||
153 | |||
154 | Input Parameter: | ||
155 | . rg - the region context | ||
156 | |||
157 | Output Parameters: | ||
158 | + center - center of the region | ||
159 | . radius - radius of the region | ||
160 | . vscale - vertical scale of the region | ||
161 | . start_ang - the right-hand side angle | ||
162 | . end_ang - the left-hand side angle | ||
163 | - width - width of the ring | ||
164 | |||
165 | Level: advanced | ||
166 | |||
167 | .seealso: RGRingSetParameters() | ||
168 | @*/ | ||
169 | 176 | PetscErrorCode RGRingGetParameters(RG rg,PetscScalar *center,PetscReal *radius,PetscReal *vscale,PetscReal *start_ang,PetscReal *end_ang,PetscReal *width) | |
170 | { | ||
171 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
176 | PetscFunctionBegin; |
172 |
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.
|
176 | PetscValidHeaderSpecific(rg,RG_CLASSID,1); |
173 |
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.
|
176 | PetscUseMethod(rg,"RGRingGetParameters_C",(RG,PetscScalar*,PetscReal*,PetscReal*,PetscReal*,PetscReal*,PetscReal*),(rg,center,radius,vscale,start_ang,end_ang,width)); |
174 |
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.
|
176 | PetscFunctionReturn(PETSC_SUCCESS); |
175 | } | ||
176 | |||
177 | 60 | static PetscErrorCode RGView_Ring(RG rg,PetscViewer viewer) | |
178 | { | ||
179 | 60 | RG_RING *ctx = (RG_RING*)rg->data; | |
180 | 60 | int winw,winh; | |
181 | 60 | PetscBool isdraw,isascii; | |
182 | 60 | PetscDraw draw; | |
183 | 60 | PetscDrawAxis axis; | |
184 | 60 | PetscReal cx,cy,radius,width,ab,cd,lx,ly,w,end_ang,x1,y1,x2,y2,r,theta,scale=1.2; | |
185 | 60 | char str[50]; | |
186 | |||
187 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
60 | PetscFunctionBegin; |
188 |
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.
|
60 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw)); |
189 |
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.
|
60 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
190 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
60 | if (isascii) { |
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.
|
50 | PetscCall(SlepcSNPrintfScalar(str,sizeof(str),ctx->center,PETSC_FALSE)); |
192 |
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.
|
50 | PetscCall(PetscViewerASCIIPrintf(viewer," center: %s, radius: %g, vscale: %g, start angle: %g, end angle: %g, ring width: %g\n",str,RGShowReal(ctx->radius),RGShowReal(ctx->vscale),(double)ctx->start_ang,(double)ctx->end_ang,(double)ctx->width)); |
193 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | } else if (isdraw) { |
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.
|
10 | PetscCall(PetscViewerDrawGetDraw(viewer,0,&draw)); |
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.
|
10 | PetscCall(PetscDrawCheckResizedWindow(draw)); |
196 |
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)); |
197 | 10 | winw = PetscMax(winw,1); winh = PetscMax(winh,1); | |
198 |
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)); |
199 |
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,"Ring region")); |
200 |
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)); |
201 | 10 | cx = PetscRealPart(ctx->center)*rg->sfactor; | |
202 | 10 | cy = PetscImaginaryPart(ctx->center)*rg->sfactor; | |
203 | 10 | radius = ctx->radius*rg->sfactor; | |
204 | 10 | width = ctx->width*rg->sfactor; | |
205 | 10 | lx = 2*(radius+width); | |
206 | 10 | ly = 2*(radius+width)*ctx->vscale; | |
207 | 10 | ab = cx; | |
208 | 10 | cd = cy; | |
209 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | w = scale*PetscMax(lx/winw,ly/winh)/2; |
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(PetscDrawAxisSetLimits(axis,ab-w*winw,ab+w*winw,cd-w*winh,cd+w*winh)); |
211 |
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)); |
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(PetscDrawAxisDestroy(&axis)); |
213 | /* draw outer ellipse */ | ||
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(PetscDrawEllipse(draw,cx,cy,2*(radius+width),2*(radius+width)*ctx->vscale,PETSC_DRAW_ORANGE)); |
215 | /* remove inner part */ | ||
216 |
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*(radius-width),2*(radius-width)*ctx->vscale,PETSC_DRAW_WHITE)); |
217 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (ctx->start_ang!=ctx->end_ang) { |
218 | /* remove section from end_ang to start_ang */ | ||
219 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | end_ang = (ctx->start_ang<ctx->end_ang)? ctx->end_ang-1: ctx->end_ang; |
220 | 10 | theta = end_ang; | |
221 | 10 | r = scale*(radius+width); | |
222 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (ctx->vscale>1) r *= ctx->vscale; |
223 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
20 | x1 = PetscMin(PetscMax(ab+r*PetscCosReal(2.0*PETSC_PI*theta),ab-w*winw),ab+w*winw); |
224 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
20 | y1 = PetscMin(PetscMax(cd+r*PetscSinReal(2.0*PETSC_PI*theta),cd-w*winh),cd+w*winh); |
225 | 40 | do { | |
226 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
40 | theta = PetscMin(PetscFloorReal(8*theta+1)/8,ctx->start_ang); |
227 |
3/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
80 | x2 = PetscMin(PetscMax(ab+r*PetscCosReal(2.0*PETSC_PI*theta),ab-w*winw),ab+w*winw); |
228 |
3/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
80 | y2 = PetscMin(PetscMax(cd+r*PetscSinReal(2.0*PETSC_PI*theta),cd-w*winh),cd+w*winh); |
229 |
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.
|
40 | PetscCall(PetscDrawTriangle(draw,cx,cy,x1,y1,x2,y2,PETSC_DRAW_WHITE,PETSC_DRAW_WHITE,PETSC_DRAW_WHITE)); |
230 | 40 | x1 = x2; y1 = y2; | |
231 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
40 | } while (theta<ctx->start_ang); |
232 | } | ||
233 |
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)); |
234 |
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)); |
235 |
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)); |
236 | } | ||
237 |
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.
|
12 | PetscFunctionReturn(PETSC_SUCCESS); |
238 | } | ||
239 | |||
240 | 113 | static PetscErrorCode RGIsTrivial_Ring(RG rg,PetscBool *trivial) | |
241 | { | ||
242 | 113 | RG_RING *ctx = (RG_RING*)rg->data; | |
243 | |||
244 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
113 | PetscFunctionBegin; |
245 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
113 | if (rg->complement) *trivial = PetscNot(ctx->radius); |
246 | 113 | else *trivial = PetscNot(ctx->radius<PETSC_MAX_REAL); | |
247 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
113 | PetscFunctionReturn(PETSC_SUCCESS); |
248 | } | ||
249 | |||
250 | 63 | static PetscErrorCode RGComputeContour_Ring(RG rg,PetscInt n,PetscScalar *cr,PetscScalar *ci) | |
251 | { | ||
252 | 63 | RG_RING *ctx = (RG_RING*)rg->data; | |
253 | 63 | PetscReal theta,start_ang; | |
254 | 63 | PetscInt i,n2=n/2; | |
255 | |||
256 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
63 | PetscFunctionBegin; |
257 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
63 | start_ang = (ctx->start_ang>ctx->end_ang)? ctx->start_ang-1: ctx->start_ang; |
258 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1029 | for (i=0;i<n;i++) { |
259 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
966 | if (i < n2) { |
260 | 458 | theta = ((ctx->end_ang-start_ang)*i/n2 + start_ang)*2.0*PETSC_PI; | |
261 | #if defined(PETSC_USE_COMPLEX) | ||
262 | 333 | cr[i] = ctx->center + (ctx->radius+ctx->width/2.0)*PetscCMPLX(PetscCosReal(theta),ctx->vscale*PetscSinReal(theta)); | |
263 | #else | ||
264 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
125 | if (cr) cr[i] = ctx->center + (ctx->radius+ctx->width/2.0)*PetscCosReal(theta); |
265 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
125 | if (ci) ci[i] = (ctx->radius+ctx->width/2.0)*ctx->vscale*PetscSinReal(theta); |
266 | #endif | ||
267 | } else { | ||
268 | 508 | theta = ((ctx->end_ang-start_ang)*(n-i)/n2 + start_ang)*2.0*PETSC_PI; | |
269 | #if defined(PETSC_USE_COMPLEX) | ||
270 | 358 | cr[i] = ctx->center + (ctx->radius-ctx->width/2.0)*PetscCMPLX(PetscCosReal(theta),ctx->vscale*PetscSinReal(theta)); | |
271 | #else | ||
272 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
150 | if (cr) cr[i] = ctx->center + (ctx->radius-ctx->width/2.0)*PetscCosReal(theta); |
273 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
150 | if (ci) ci[i] = (ctx->radius-ctx->width/2.0)*ctx->vscale*PetscSinReal(theta); |
274 | #endif | ||
275 | } | ||
276 | } | ||
277 |
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.
|
63 | PetscFunctionReturn(PETSC_SUCCESS); |
278 | } | ||
279 | |||
280 | 50 | static PetscErrorCode RGComputeBoundingBox_Ring(RG rg,PetscReal *a,PetscReal *b,PetscReal *c,PetscReal *d) | |
281 | { | ||
282 | 50 | RG_RING *ctx = (RG_RING*)rg->data; | |
283 | |||
284 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50 | PetscFunctionBegin; |
285 | /* current implementation does not return a tight bounding box */ | ||
286 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
50 | if (a) *a = PetscRealPart(ctx->center) - (ctx->radius+ctx->width/2.0); |
287 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
50 | if (b) *b = PetscRealPart(ctx->center) + (ctx->radius+ctx->width/2.0); |
288 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
50 | if (c) *c = PetscImaginaryPart(ctx->center) - (ctx->radius+ctx->width/2.0)*ctx->vscale; |
289 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
50 | if (d) *d = PetscImaginaryPart(ctx->center) + (ctx->radius+ctx->width/2.0)*ctx->vscale; |
290 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
50 | PetscFunctionReturn(PETSC_SUCCESS); |
291 | } | ||
292 | |||
293 | 13 | static PetscErrorCode RGComputeQuadrature_Ring(RG rg,RGQuadRule quad,PetscInt n,PetscScalar *z,PetscScalar *zn,PetscScalar *w) | |
294 | { | ||
295 | 13 | RG_RING *ctx = (RG_RING*)rg->data; | |
296 | 13 | PetscReal max_w=0.0; | |
297 | 13 | PetscScalar tmp,tmp2; | |
298 | 13 | PetscInt i,j; | |
299 | |||
300 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
13 | PetscFunctionBegin; |
301 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
|
13 | if (quad == RG_QUADRULE_CHEBYSHEV) { |
302 | #if defined(PETSC_USE_COMPLEX) | ||
303 | PetscReal theta; | ||
304 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
|
99 | for (i=0;i<n;i++) { |
305 | 96 | theta = PETSC_PI*(i+0.5)/n; | |
306 | 96 | zn[i] = PetscCosReal(theta); | |
307 | 96 | w[i] = PetscCosReal((n-1)*theta)/n; | |
308 | 96 | theta = (ctx->start_ang*2.0+(ctx->end_ang-ctx->start_ang)*(PetscRealPart(zn[i])+1.0))*PETSC_PI; | |
309 | 96 | z[i] = rg->sfactor*(ctx->center + ctx->radius*PetscCMPLX(PetscCosReal(theta),ctx->vscale*PetscSinReal(theta))); | |
310 | } | ||
311 | #else | ||
312 | ✗ | SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Integration points on a vertical line require complex arithmetic"); | |
313 | #endif | ||
314 | } else { /* RG_QUADRULE_TRAPEZOIDAL */ | ||
315 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
330 | for (i=0;i<n;i++) { |
316 | 320 | zn[i] = (z[i]-rg->sfactor*ctx->center)/(rg->sfactor*ctx->radius); | |
317 | 320 | tmp = 1.0; tmp2 = 1.0; | |
318 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
10560 | for (j=0;j<n;j++) { |
319 | 10240 | tmp *= z[j]; | |
320 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
10240 | if (i != j) tmp2 *= z[j]-z[i]; |
321 | } | ||
322 | 320 | w[i] = tmp/tmp2; | |
323 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
430 | max_w = PetscMax(PetscAbsScalar(w[i]),max_w); |
324 | } | ||
325 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
330 | for (i=0;i<n;i++) w[i] /= (PetscScalar)max_w; |
326 | } | ||
327 |
6/12✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
328 | } | ||
329 | |||
330 | 327 | static PetscErrorCode RGCheckInside_Ring(RG rg,PetscReal px,PetscReal py,PetscInt *inside) | |
331 | { | ||
332 | 327 | RG_RING *ctx = (RG_RING*)rg->data; | |
333 | 327 | PetscReal dx,dy,r; | |
334 | |||
335 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
327 | PetscFunctionBegin; |
336 | /* outer ellipse */ | ||
337 | #if defined(PETSC_USE_COMPLEX) | ||
338 | 277 | dx = (px-PetscRealPart(ctx->center))/(ctx->radius+ctx->width/2.0); | |
339 | 277 | dy = (py-PetscImaginaryPart(ctx->center))/(ctx->radius+ctx->width/2.0); | |
340 | #else | ||
341 | 50 | dx = (px-ctx->center)/(ctx->radius+ctx->width/2.0); | |
342 | 50 | dy = py/(ctx->radius+ctx->width/2.0); | |
343 | #endif | ||
344 | 327 | r = 1.0-dx*dx-(dy*dy)/(ctx->vscale*ctx->vscale); | |
345 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
327 | *inside = PetscSign(r); |
346 | /* inner ellipse */ | ||
347 | #if defined(PETSC_USE_COMPLEX) | ||
348 | 277 | dx = (px-PetscRealPart(ctx->center))/(ctx->radius-ctx->width/2.0); | |
349 | 277 | dy = (py-PetscImaginaryPart(ctx->center))/(ctx->radius-ctx->width/2.0); | |
350 | #else | ||
351 | 50 | dx = (px-ctx->center)/(ctx->radius-ctx->width/2.0); | |
352 | 50 | dy = py/(ctx->radius-ctx->width/2.0); | |
353 | #endif | ||
354 | 327 | r = -1.0+dx*dx+(dy*dy)/(ctx->vscale*ctx->vscale); | |
355 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
327 | *inside *= PetscSign(r); |
356 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
327 | if (*inside == 1) { /* check angles */ |
357 | #if defined(PETSC_USE_COMPLEX) | ||
358 | 192 | dx = (px-PetscRealPart(ctx->center)); | |
359 | 192 | dy = (py-PetscImaginaryPart(ctx->center)); | |
360 | #else | ||
361 | 20 | dx = px-ctx->center; | |
362 | 20 | dy = py; | |
363 | #endif | ||
364 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
212 | if (dx == 0) { |
365 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (dy == 0) r = -1; |
366 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | else if (dy > 0) r = 0.25; |
367 | ✗ | else r = 0.75; | |
368 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
202 | } else if (dx > 0) { |
369 | 130 | r = PetscAtanReal((dy/ctx->vscale)/dx); | |
370 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
|
130 | if (dy >= 0) r /= 2*PETSC_PI; |
371 | 60 | else r = r/(2*PETSC_PI)+1; | |
372 | 72 | } else r = PetscAtanReal((dy/ctx->vscale)/dx)/(2*PETSC_PI)+0.5; | |
373 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
212 | if (ctx->start_ang>ctx->end_ang) { |
374 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
130 | if (r>ctx->end_ang && r<ctx->start_ang) *inside = -1; |
375 | } else { | ||
376 |
3/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 10 times.
|
82 | if (r<ctx->start_ang || r>ctx->end_ang) *inside = -1; |
377 | } | ||
378 | } | ||
379 |
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.
|
327 | PetscFunctionReturn(PETSC_SUCCESS); |
380 | } | ||
381 | |||
382 | 30 | static PetscErrorCode RGIsAxisymmetric_Ring(RG rg,PetscBool vertical,PetscBool *symm) | |
383 | { | ||
384 | 30 | RG_RING *ctx = (RG_RING*)rg->data; | |
385 | |||
386 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
387 |
6/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
|
40 | if (vertical) *symm = (PetscRealPart(ctx->center) == 0.0 && PetscAbs(ctx->start_ang+ctx->end_ang-PetscRealConstant(1.0)) == 0.5)? PETSC_TRUE: PETSC_FALSE; |
388 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
20 | else *symm = (PetscImaginaryPart(ctx->center) == 0.0 && ctx->start_ang+ctx->end_ang == 1.0)? PETSC_TRUE: PETSC_FALSE; |
389 |
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); |
390 | } | ||
391 | |||
392 | 106 | static PetscErrorCode RGSetFromOptions_Ring(RG rg,PetscOptionItems PetscOptionsObject) | |
393 | { | ||
394 | 106 | PetscScalar s; | |
395 | 106 | PetscReal r1,r2,r3,r4,r5; | |
396 | 106 | PetscBool flg1,flg2,flg3,flg4,flg5,flg6; | |
397 | |||
398 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
106 | PetscFunctionBegin; |
399 |
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.
|
106 | PetscOptionsHeadBegin(PetscOptionsObject,"RG Ring Options"); |
400 | |||
401 |
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.
|
106 | PetscCall(RGRingGetParameters(rg,&s,&r1,&r2,&r3,&r4,&r5)); |
402 |
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.
|
106 | PetscCall(PetscOptionsScalar("-rg_ring_center","Center of ellipse","RGRingSetParameters",s,&s,&flg1)); |
403 |
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.
|
106 | PetscCall(PetscOptionsReal("-rg_ring_radius","Radius of ellipse","RGRingSetParameters",r1,&r1,&flg2)); |
404 |
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.
|
106 | PetscCall(PetscOptionsReal("-rg_ring_vscale","Vertical scale of ellipse","RGRingSetParameters",r2,&r2,&flg3)); |
405 |
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.
|
106 | PetscCall(PetscOptionsReal("-rg_ring_startangle","Right-hand side angle","RGRingSetParameters",r3,&r3,&flg4)); |
406 |
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.
|
106 | PetscCall(PetscOptionsReal("-rg_ring_endangle","Left-hand side angle","RGRingSetParameters",r4,&r4,&flg5)); |
407 |
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.
|
106 | PetscCall(PetscOptionsReal("-rg_ring_width","Width of ring","RGRingSetParameters",r5,&r5,&flg6)); |
408 |
12/18✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 10 times.
✓ Branch 11 taken 10 times.
✓ Branch 12 taken 2 times.
✓ Branch 13 taken 8 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
|
106 | if (flg1 || flg2 || flg3 || flg4 || flg5 || flg6) PetscCall(RGRingSetParameters(rg,s,r1,r2,r3,r4,r5)); |
409 | |||
410 |
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.
|
106 | PetscOptionsHeadEnd(); |
411 |
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.
|
22 | PetscFunctionReturn(PETSC_SUCCESS); |
412 | } | ||
413 | |||
414 | 93 | static PetscErrorCode RGDestroy_Ring(RG rg) | |
415 | { | ||
416 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
93 | PetscFunctionBegin; |
417 |
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.
|
93 | PetscCall(PetscFree(rg->data)); |
418 |
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.
|
93 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGRingSetParameters_C",NULL)); |
419 |
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.
|
93 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGRingGetParameters_C",NULL)); |
420 |
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.
|
19 | PetscFunctionReturn(PETSC_SUCCESS); |
421 | } | ||
422 | |||
423 | 93 | SLEPC_EXTERN PetscErrorCode RGCreate_Ring(RG rg) | |
424 | { | ||
425 | 93 | RG_RING *ring; | |
426 | |||
427 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
93 | PetscFunctionBegin; |
428 |
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.
|
93 | PetscCall(PetscNew(&ring)); |
429 | 93 | ring->center = 0.0; | |
430 | 93 | ring->radius = PETSC_MAX_REAL; | |
431 | 93 | ring->vscale = 1.0; | |
432 | 93 | ring->start_ang = 0.0; | |
433 | 93 | ring->end_ang = 1.0; | |
434 | 93 | ring->width = 0.1; | |
435 | 93 | rg->data = (void*)ring; | |
436 | |||
437 | 93 | rg->ops->istrivial = RGIsTrivial_Ring; | |
438 | 93 | rg->ops->computecontour = RGComputeContour_Ring; | |
439 | 93 | rg->ops->computebbox = RGComputeBoundingBox_Ring; | |
440 | 93 | rg->ops->computequadrature = RGComputeQuadrature_Ring; | |
441 | 93 | rg->ops->checkinside = RGCheckInside_Ring; | |
442 | 93 | rg->ops->isaxisymmetric = RGIsAxisymmetric_Ring; | |
443 | 93 | rg->ops->setfromoptions = RGSetFromOptions_Ring; | |
444 | 93 | rg->ops->view = RGView_Ring; | |
445 | 93 | rg->ops->destroy = RGDestroy_Ring; | |
446 |
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.
|
93 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGRingSetParameters_C",RGRingSetParameters_Ring)); |
447 |
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.
|
93 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGRingGetParameters_C",RGRingGetParameters_Ring)); |
448 |
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.
|
19 | PetscFunctionReturn(PETSC_SUCCESS); |
449 | } | ||
450 |