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 | Interval of the real axis or more generally a (possibly open) rectangle | ||
12 | of the complex plane | ||
13 | */ | ||
14 | |||
15 | #include <slepc/private/rgimpl.h> /*I "slepcrg.h" I*/ | ||
16 | #include <petscdraw.h> | ||
17 | |||
18 | typedef struct { | ||
19 | PetscReal a,b; /* interval in the real axis */ | ||
20 | PetscReal c,d; /* interval in the imaginary axis */ | ||
21 | } RG_INTERVAL; | ||
22 | |||
23 | 1159 | static PetscErrorCode RGIntervalSetEndpoints_Interval(RG rg,PetscReal a,PetscReal b,PetscReal c,PetscReal d) | |
24 | { | ||
25 | 1159 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
26 | |||
27 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1159 | PetscFunctionBegin; |
28 |
1/6✗ 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.
|
1159 | PetscCheck(a || b || c || d,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"At least one argument must be nonzero"); |
29 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1159 | PetscCheck(a!=b || !a,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"Badly defined interval, endpoints must be distinct (or both zero)"); |
30 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1159 | PetscCheck(a<=b,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"Badly defined interval, must be a<b"); |
31 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1159 | PetscCheck(c!=d || !c,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"Badly defined interval, endpoints must be distinct (or both zero)"); |
32 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1159 | PetscCheck(c<=d,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"Badly defined interval, must be c<d"); |
33 | #if !defined(PETSC_USE_COMPLEX) | ||
34 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
538 | PetscCheck(c==-d,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"In real scalars the region must be symmetric wrt real axis"); |
35 | #endif | ||
36 | 1159 | ctx->a = a; | |
37 | 1159 | ctx->b = b; | |
38 | 1159 | ctx->c = c; | |
39 | 1159 | ctx->d = d; | |
40 |
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.
|
1159 | PetscFunctionReturn(PETSC_SUCCESS); |
41 | } | ||
42 | |||
43 | /*@ | ||
44 | RGIntervalSetEndpoints - Sets the parameters defining the interval region. | ||
45 | |||
46 | Logically Collective | ||
47 | |||
48 | Input Parameters: | ||
49 | + rg - the region context | ||
50 | . a - left endpoint of the interval in the real axis | ||
51 | . b - right endpoint of the interval in the real axis | ||
52 | . c - bottom endpoint of the interval in the imaginary axis | ||
53 | - d - top endpoint of the interval in the imaginary axis | ||
54 | |||
55 | Options Database Keys: | ||
56 | . -rg_interval_endpoints - the four endpoints | ||
57 | |||
58 | Note: | ||
59 | The region is defined as [a,b]x[c,d]. Particular cases are an interval on | ||
60 | the real axis (c=d=0), similar for the imaginary axis (a=b=0), the whole | ||
61 | complex plane (a=-inf,b=inf,c=-inf,d=inf), and so on. | ||
62 | |||
63 | When PETSc is built with real scalars, the region must be symmetric with | ||
64 | respect to the real axis. | ||
65 | |||
66 | Level: advanced | ||
67 | |||
68 | .seealso: RGIntervalGetEndpoints() | ||
69 | @*/ | ||
70 | 1159 | PetscErrorCode RGIntervalSetEndpoints(RG rg,PetscReal a,PetscReal b,PetscReal c,PetscReal d) | |
71 | { | ||
72 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1159 | PetscFunctionBegin; |
73 |
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.
|
1159 | PetscValidHeaderSpecific(rg,RG_CLASSID,1); |
74 |
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.
|
1159 | PetscValidLogicalCollectiveReal(rg,a,2); |
75 |
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.
|
1159 | PetscValidLogicalCollectiveReal(rg,b,3); |
76 |
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.
|
1159 | PetscValidLogicalCollectiveReal(rg,c,4); |
77 |
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.
|
1159 | PetscValidLogicalCollectiveReal(rg,d,5); |
78 |
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.
|
1159 | PetscTryMethod(rg,"RGIntervalSetEndpoints_C",(RG,PetscReal,PetscReal,PetscReal,PetscReal),(rg,a,b,c,d)); |
79 |
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.
|
1159 | PetscFunctionReturn(PETSC_SUCCESS); |
80 | } | ||
81 | |||
82 | 4048 | static PetscErrorCode RGIntervalGetEndpoints_Interval(RG rg,PetscReal *a,PetscReal *b,PetscReal *c,PetscReal *d) | |
83 | { | ||
84 | 4048 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
85 | |||
86 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4048 | PetscFunctionBegin; |
87 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4048 | if (a) *a = ctx->a; |
88 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4048 | if (b) *b = ctx->b; |
89 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4048 | if (c) *c = ctx->c; |
90 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4048 | if (d) *d = ctx->d; |
91 |
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.
|
4048 | PetscFunctionReturn(PETSC_SUCCESS); |
92 | } | ||
93 | |||
94 | /*@ | ||
95 | RGIntervalGetEndpoints - Gets the parameters that define the interval region. | ||
96 | |||
97 | Not Collective | ||
98 | |||
99 | Input Parameter: | ||
100 | . rg - the region context | ||
101 | |||
102 | Output Parameters: | ||
103 | + a - left endpoint of the interval in the real axis | ||
104 | . b - right endpoint of the interval in the real axis | ||
105 | . c - bottom endpoint of the interval in the imaginary axis | ||
106 | - d - top endpoint of the interval in the imaginary axis | ||
107 | |||
108 | Level: advanced | ||
109 | |||
110 | .seealso: RGIntervalSetEndpoints() | ||
111 | @*/ | ||
112 | 4048 | PetscErrorCode RGIntervalGetEndpoints(RG rg,PetscReal *a,PetscReal *b,PetscReal *c,PetscReal *d) | |
113 | { | ||
114 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4048 | PetscFunctionBegin; |
115 |
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.
|
4048 | PetscValidHeaderSpecific(rg,RG_CLASSID,1); |
116 |
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.
|
4048 | PetscUseMethod(rg,"RGIntervalGetEndpoints_C",(RG,PetscReal*,PetscReal*,PetscReal*,PetscReal*),(rg,a,b,c,d)); |
117 |
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.
|
4048 | PetscFunctionReturn(PETSC_SUCCESS); |
118 | } | ||
119 | |||
120 | 62 | static PetscErrorCode RGView_Interval(RG rg,PetscViewer viewer) | |
121 | { | ||
122 | 62 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
123 | 62 | PetscBool isdraw,isascii; | |
124 | 62 | int winw,winh; | |
125 | 62 | PetscDraw draw; | |
126 | 62 | PetscDrawAxis axis; | |
127 | 62 | PetscReal a,b,c,d,ab,cd,lx,ly,w,scale=1.2; | |
128 | |||
129 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
62 | PetscFunctionBegin; |
130 |
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.
|
62 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw)); |
131 |
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.
|
62 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
132 |
15/16✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 8 taken 10 times.
✓ Branch 9 taken 10 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 10 times.
✓ Branch 12 taken 2 times.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
62 | if (isascii) PetscCall(PetscViewerASCIIPrintf(viewer," region: [%g,%g]x[%g,%g]\n",RGShowReal(ctx->a),RGShowReal(ctx->b),RGShowReal(ctx->c),RGShowReal(ctx->d))); |
133 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | else if (isdraw) { |
134 |
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)); |
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.
|
10 | PetscCall(PetscDrawCheckResizedWindow(draw)); |
136 |
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)); |
137 | 10 | winw = PetscMax(winw,1); winh = PetscMax(winh,1); | |
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(PetscDrawClear(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(PetscDrawSetTitle(draw,"Interval region")); |
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(PetscDrawAxisCreate(draw,&axis)); |
141 | 10 | a = ctx->a*rg->sfactor; | |
142 | 10 | b = ctx->b*rg->sfactor; | |
143 | 10 | c = ctx->c*rg->sfactor; | |
144 | 10 | d = ctx->d*rg->sfactor; | |
145 | 10 | lx = b-a; | |
146 | 10 | ly = d-c; | |
147 | 10 | ab = (a+b)/2; | |
148 | 10 | cd = (c+d)/2; | |
149 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | w = scale*PetscMax(lx/winw,ly/winh)/2; |
150 |
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)); |
151 |
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)); |
152 |
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)); |
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(PetscDrawRectangle(draw,a,c,b,d,PETSC_DRAW_BLUE,PETSC_DRAW_BLUE,PETSC_DRAW_BLUE,PETSC_DRAW_BLUE)); |
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(PetscDrawFlush(draw)); |
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(PetscDrawSave(draw)); |
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(PetscDrawPause(draw)); |
157 | } | ||
158 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
10 | PetscFunctionReturn(PETSC_SUCCESS); |
159 | } | ||
160 | |||
161 | 84169 | static PetscErrorCode RGIsTrivial_Interval(RG rg,PetscBool *trivial) | |
162 | { | ||
163 | 84169 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
164 | |||
165 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
84169 | PetscFunctionBegin; |
166 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
84439 | if (rg->complement) *trivial = (ctx->a==ctx->b && ctx->c==ctx->d)? PETSC_TRUE: PETSC_FALSE; |
167 |
5/8✓ 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 not taken.
✓ Branch 7 taken 10 times.
|
89253 | else *trivial = (ctx->a<=-PETSC_MAX_REAL && ctx->b>=PETSC_MAX_REAL && ctx->c<=-PETSC_MAX_REAL && ctx->d>=PETSC_MAX_REAL)? PETSC_TRUE: PETSC_FALSE; |
168 |
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.
|
84169 | PetscFunctionReturn(PETSC_SUCCESS); |
169 | } | ||
170 | |||
171 | 406 | static PetscErrorCode RGComputeContour_Interval(RG rg,PetscInt n,PetscScalar *cr,PetscScalar *ci) | |
172 | { | ||
173 | 406 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
174 | 406 | PetscInt i,N,Nv,Nh,k1,k0; | |
175 | 406 | PetscReal hv,hh,t; | |
176 | |||
177 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
406 | PetscFunctionBegin; |
178 |
4/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
406 | PetscCheck(ctx->a>-PETSC_MAX_REAL && ctx->b<PETSC_MAX_REAL && ctx->c>-PETSC_MAX_REAL && ctx->d<PETSC_MAX_REAL,PetscObjectComm((PetscObject)rg),PETSC_ERR_SUP,"Contour not defined in unbounded regions"); |
179 |
3/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
406 | if (ctx->a==ctx->b || ctx->c==ctx->d) { |
180 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
222 | if (ctx->a==ctx->b) {hv = (ctx->d-ctx->c)/(n-1); hh = 0.0;} |
181 | 222 | else {hh = (ctx->b-ctx->a)/(n-1); hv = 0.0;} | |
182 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
738926 | for (i=0;i<n;i++) { |
183 | #if defined(PETSC_USE_COMPLEX) | ||
184 | 1140 | cr[i] = PetscCMPLX(ctx->a+hh*i,ctx->c+hv*i); | |
185 | #else | ||
186 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
737564 | if (cr) cr[i] = ctx->a+hh*i; |
187 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
737564 | if (ci) ci[i] = ctx->c+hv*i; |
188 | #endif | ||
189 | } | ||
190 | } else { | ||
191 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
184 | PetscCheck(n>3,PetscObjectComm((PetscObject)rg),PETSC_ERR_SUP,"Minimum number of contour points: 4"); |
192 | 184 | N = n/2; | |
193 | 184 | t = ((ctx->d-ctx->c)/(ctx->d-ctx->c+ctx->b-ctx->a))*N; | |
194 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
184 | Nv = t-PetscFloorReal(t)>0.5?PetscCeilReal(t):PetscFloorReal(t); |
195 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
184 | if (Nv==0) Nv++; |
196 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
134 | else if (Nv==N) Nv--; |
197 | 184 | Nh = N-Nv; | |
198 | 184 | hh = (ctx->b-ctx->a)/Nh; | |
199 | 184 | hv = (ctx->d-ctx->c)/Nv; | |
200 | /* positive imaginary part first */ | ||
201 | 184 | k1 = Nv/2+1; | |
202 | 184 | k0 = Nv-k1; | |
203 | |||
204 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
229 | for (i=k1;i<Nv;i++) { |
205 | #if defined(PETSC_USE_COMPLEX) | ||
206 | 45 | cr[i-k1] = PetscCMPLX(ctx->b,ctx->c+i*hv); | |
207 | 45 | cr[i-k1+N] = PetscCMPLX(ctx->a,ctx->d-i*hv); | |
208 | #else | ||
209 | ✗ | if (cr) {cr[i-k1] = ctx->b; cr[i-k1+N] = ctx->a;} | |
210 | ✗ | if (ci) {ci[i-k1] = ctx->c+i*hv; ci[i-k1+N] = ctx->d-i*hv;} | |
211 | #endif | ||
212 | } | ||
213 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
488085 | for (i=0;i<Nh;i++) { |
214 | #if defined(PETSC_USE_COMPLEX) | ||
215 | 437871 | cr[i+k0] = PetscCMPLX(ctx->b-i*hh,ctx->d); | |
216 | 437871 | cr[i+k0+N] = PetscCMPLX(ctx->a+i*hh,ctx->c); | |
217 | #else | ||
218 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
50030 | if (cr) {cr[i+k0] = ctx->b-i*hh; cr[i+k0+N] = ctx->a+i*hh;} |
219 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
50030 | if (ci) {ci[i+k0] = ctx->d; ci[i+k0+N] = ctx->c;} |
220 | #endif | ||
221 | } | ||
222 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
416 | for (i=0;i<k1;i++) { |
223 | #if defined(PETSC_USE_COMPLEX) | ||
224 | 212 | cr[i+k0+Nh] = PetscCMPLX(ctx->a,ctx->d-i*hv); | |
225 | 212 | cr[i+k0+Nh+N] = PetscCMPLX(ctx->b,ctx->c+i*hv); | |
226 | #else | ||
227 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
20 | if (cr) {cr[i+k0+Nh] = ctx->a; cr[i+k0+Nh+N] = ctx->b;} |
228 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
20 | if (ci) {ci[i+k0+Nh] = ctx->d+i*hv; ci[i+k0+Nh+N] = ctx->c-i*hv;} |
229 | #endif | ||
230 | } | ||
231 | } | ||
232 |
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.
|
76 | PetscFunctionReturn(PETSC_SUCCESS); |
233 | } | ||
234 | |||
235 | 36 | static PetscErrorCode RGComputeBoundingBox_Interval(RG rg,PetscReal *a,PetscReal *b,PetscReal *c,PetscReal *d) | |
236 | { | ||
237 | 36 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
238 | |||
239 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
36 | PetscFunctionBegin; |
240 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
|
36 | if (a) *a = ctx->a; |
241 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
|
36 | if (b) *b = ctx->b; |
242 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
|
36 | if (c) *c = ctx->c; |
243 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
|
36 | if (d) *d = ctx->d; |
244 |
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.
|
36 | PetscFunctionReturn(PETSC_SUCCESS); |
245 | } | ||
246 | |||
247 | 95 | static PetscErrorCode RGComputeQuadrature_Interval(RG rg,RGQuadRule quad,PetscInt n,PetscScalar *z,PetscScalar *zn,PetscScalar *w) | |
248 | { | ||
249 | 95 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
250 | 95 | PetscReal theta,max_w=0.0,radius=1.0; | |
251 | 95 | PetscScalar tmp,tmp2,center=0.0; | |
252 | 95 | PetscInt i,j; | |
253 | |||
254 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
95 | PetscFunctionBegin; |
255 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
95 | if (quad == RG_QUADRULE_CHEBYSHEV) { |
256 |
3/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
77 | PetscCheck((ctx->c==ctx->d && ctx->c==0.0) || (ctx->a==ctx->b && ctx->a==0.0),PetscObjectComm((PetscObject)rg),PETSC_ERR_SUP,"Endpoints of the imaginary axis or the real axis must be both zero"); |
257 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2341 | for (i=0;i<n;i++) { |
258 | 2264 | theta = PETSC_PI*(i+0.5)/n; | |
259 | 2264 | zn[i] = PetscCosReal(theta); | |
260 | 2264 | w[i] = PetscCosReal((n-1)*theta)/n; | |
261 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
2264 | if (ctx->c==ctx->d) z[i] = ((zn[i]+1.0)*(ctx->b-ctx->a)/2.0+ctx->a)*rg->sfactor; |
262 | ✗ | else if (ctx->a==ctx->b) { | |
263 | #if defined(PETSC_USE_COMPLEX) | ||
264 | ✗ | z[i] = ((zn[i]+1.0)*(ctx->d-ctx->c)/2.0+ctx->c)*rg->sfactor*PETSC_i; | |
265 | #else | ||
266 |
0/2✗ Branch 0 not taken.
✗ Branch 1 not taken.
|
1244 | SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Integration points on a vertical line require complex arithmetic"); |
267 | #endif | ||
268 | } | ||
269 | } | ||
270 | } else { /* RG_QUADRULE_TRAPEZOIDAL */ | ||
271 | #if defined(PETSC_USE_COMPLEX) | ||
272 | 13 | center = PetscCMPLX(ctx->b+ctx->a,ctx->d+ctx->c)*rg->sfactor/2.0; | |
273 | #else | ||
274 | 5 | center = (ctx->b+ctx->a)*rg->sfactor/2.0; | |
275 | #endif | ||
276 | 36 | radius = PetscSqrtReal(PetscPowRealInt(rg->sfactor*(ctx->b-ctx->a)/2.0,2)+PetscPowRealInt(rg->sfactor*(ctx->d-ctx->c)/2.0,2)); | |
277 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
514 | for (i=0;i<n;i++) { |
278 | 496 | zn[i] = (z[i]-center)/radius; | |
279 | 496 | tmp = 1.0; tmp2 = 1.0; | |
280 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
14448 | for (j=0;j<n;j++) { |
281 | 13952 | tmp *= z[j]; | |
282 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
13952 | if (i != j) tmp2 *= z[j]-z[i]; |
283 | } | ||
284 | 496 | w[i] = tmp/tmp2; | |
285 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
646 | max_w = PetscMax(PetscAbsScalar(w[i]),max_w); |
286 | } | ||
287 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
514 | for (i=0;i<n;i++) w[i] /= (PetscScalar)max_w; |
288 | } | ||
289 |
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); |
290 | } | ||
291 | |||
292 | 1797666 | static PetscErrorCode RGCheckInside_Interval(RG rg,PetscReal dx,PetscReal dy,PetscInt *inside) | |
293 | { | ||
294 | 1797666 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
295 | |||
296 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1797666 | PetscFunctionBegin; |
297 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
1797666 | if (dx>ctx->a && dx<ctx->b) *inside = 1; |
298 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
1009625 | else if (dx==ctx->a || dx==ctx->b) *inside = 0; |
299 | 1009455 | else *inside = -1; | |
300 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1797666 | if (*inside>=0) { |
301 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
788211 | if (dy>ctx->c && dy<ctx->d) ; |
302 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
474296 | else if (dy==ctx->c || dy==ctx->d) *inside = 0; |
303 | 434861 | else *inside = -1; | |
304 | } | ||
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.
|
1797666 | PetscFunctionReturn(PETSC_SUCCESS); |
306 | } | ||
307 | |||
308 | 61 | static PetscErrorCode RGIsAxisymmetric_Interval(RG rg,PetscBool vertical,PetscBool *symm) | |
309 | { | ||
310 | 61 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
311 | |||
312 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
61 | PetscFunctionBegin; |
313 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
61 | if (vertical) *symm = (ctx->a == -ctx->b)? PETSC_TRUE: PETSC_FALSE; |
314 | 31 | else *symm = (ctx->c == -ctx->d)? PETSC_TRUE: PETSC_FALSE; | |
315 |
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.
|
61 | PetscFunctionReturn(PETSC_SUCCESS); |
316 | } | ||
317 | |||
318 | 9256 | static PetscErrorCode RGSetFromOptions_Interval(RG rg,PetscOptionItems PetscOptionsObject) | |
319 | { | ||
320 | 9256 | PetscBool flg; | |
321 | 9256 | PetscInt k; | |
322 | 9256 | PetscReal array[4]={0,0,0,0}; | |
323 | |||
324 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
9256 | PetscFunctionBegin; |
325 |
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.
|
9256 | PetscOptionsHeadBegin(PetscOptionsObject,"RG Interval Options"); |
326 | |||
327 | 9256 | k = 4; | |
328 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9256 | PetscCall(PetscOptionsRealArray("-rg_interval_endpoints","Interval endpoints (two or four real values separated with a comma without spaces)","RGIntervalSetEndpoints",array,&k,&flg)); |
329 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9256 | if (flg) { |
330 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
525 | PetscCheck(k>1,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_SIZ,"Must pass at least two values in -rg_interval_endpoints (comma-separated without spaces)"); |
331 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
525 | PetscCall(RGIntervalSetEndpoints(rg,array[0],array[1],array[2],array[3])); |
332 | } | ||
333 | |||
334 |
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.
|
9256 | PetscOptionsHeadEnd(); |
335 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1787 | PetscFunctionReturn(PETSC_SUCCESS); |
336 | } | ||
337 | |||
338 | 9782 | static PetscErrorCode RGDestroy_Interval(RG rg) | |
339 | { | ||
340 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
9782 | PetscFunctionBegin; |
341 |
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.
|
9782 | PetscCall(PetscFree(rg->data)); |
342 |
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.
|
9782 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGIntervalSetEndpoints_C",NULL)); |
343 |
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.
|
9782 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGIntervalGetEndpoints_C",NULL)); |
344 |
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.
|
1891 | PetscFunctionReturn(PETSC_SUCCESS); |
345 | } | ||
346 | |||
347 | 9782 | SLEPC_EXTERN PetscErrorCode RGCreate_Interval(RG rg) | |
348 | { | ||
349 | 9782 | RG_INTERVAL *interval; | |
350 | |||
351 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
9782 | PetscFunctionBegin; |
352 |
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.
|
9782 | PetscCall(PetscNew(&interval)); |
353 | 9782 | interval->a = -PETSC_MAX_REAL; | |
354 | 9782 | interval->b = PETSC_MAX_REAL; | |
355 | 9782 | interval->c = -PETSC_MAX_REAL; | |
356 | 9782 | interval->d = PETSC_MAX_REAL; | |
357 | 9782 | rg->data = (void*)interval; | |
358 | |||
359 | 9782 | rg->ops->istrivial = RGIsTrivial_Interval; | |
360 | 9782 | rg->ops->computecontour = RGComputeContour_Interval; | |
361 | 9782 | rg->ops->computebbox = RGComputeBoundingBox_Interval; | |
362 | 9782 | rg->ops->computequadrature = RGComputeQuadrature_Interval; | |
363 | 9782 | rg->ops->checkinside = RGCheckInside_Interval; | |
364 | 9782 | rg->ops->isaxisymmetric = RGIsAxisymmetric_Interval; | |
365 | 9782 | rg->ops->setfromoptions = RGSetFromOptions_Interval; | |
366 | 9782 | rg->ops->view = RGView_Interval; | |
367 | 9782 | rg->ops->destroy = RGDestroy_Interval; | |
368 |
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.
|
9782 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGIntervalSetEndpoints_C",RGIntervalSetEndpoints_Interval)); |
369 |
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.
|
9782 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGIntervalGetEndpoints_C",RGIntervalGetEndpoints_Interval)); |
370 |
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.
|
1891 | PetscFunctionReturn(PETSC_SUCCESS); |
371 | } | ||
372 |