| 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 Key: | ||
| 56 | . -rg_interval_endpoints <a,b,c,d> - comma-separated list of values (two or four) | ||
| 57 | |||
| 58 | Note: | ||
| 59 | The region is defined as $[a,b]\times[c,d]$. Particular cases are an interval on | ||
| 60 | the real axis ($c=d=0$), similarly for the imaginary axis ($a=b=0$), the whole | ||
| 61 | complex plane ($a=-\infty,b=\infty,c=-\infty,d=\infty$), 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: [](sec:rg), `RGINTERVAL`, `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: [](sec:rg), `RGINTERVAL`, `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 | 84176 | static PetscErrorCode RGIsTrivial_Interval(RG rg,PetscBool *trivial) | |
| 162 | { | ||
| 163 | 84176 | RG_INTERVAL *ctx = (RG_INTERVAL*)rg->data; | |
| 164 | |||
| 165 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
84176 | 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.
|
84446 | 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.
|
89260 | 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.
|
84176 | 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 | /*MC | ||
| 348 | RGINTERVAL - RGINTERVAL = "interval" - A region consisting of a (generalized) | ||
| 349 | interval, defined as $[a,b]\times[c,d]$, where the four parameters can be set with | ||
| 350 | `RGIntervalSetEndpoints()`. | ||
| 351 | |||
| 352 | Note: | ||
| 353 | The following figure shows an example of an interval region. | ||
| 354 | |||
| 355 |  | ||
| 356 | |||
| 357 | Level: beginner | ||
| 358 | |||
| 359 | .seealso: [](sec:rg), `RG`, `RGType`, `RGSetType()`, `RGIntervalSetEndpoints()` | ||
| 360 | M*/ | ||
| 361 | |||
| 362 | 9782 | SLEPC_EXTERN PetscErrorCode RGCreate_Interval(RG rg) | |
| 363 | { | ||
| 364 | 9782 | RG_INTERVAL *interval; | |
| 365 | |||
| 366 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
9782 | PetscFunctionBegin; |
| 367 |
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)); |
| 368 | 9782 | interval->a = -PETSC_MAX_REAL; | |
| 369 | 9782 | interval->b = PETSC_MAX_REAL; | |
| 370 | 9782 | interval->c = -PETSC_MAX_REAL; | |
| 371 | 9782 | interval->d = PETSC_MAX_REAL; | |
| 372 | 9782 | rg->data = (void*)interval; | |
| 373 | |||
| 374 | 9782 | rg->ops->istrivial = RGIsTrivial_Interval; | |
| 375 | 9782 | rg->ops->computecontour = RGComputeContour_Interval; | |
| 376 | 9782 | rg->ops->computebbox = RGComputeBoundingBox_Interval; | |
| 377 | 9782 | rg->ops->computequadrature = RGComputeQuadrature_Interval; | |
| 378 | 9782 | rg->ops->checkinside = RGCheckInside_Interval; | |
| 379 | 9782 | rg->ops->isaxisymmetric = RGIsAxisymmetric_Interval; | |
| 380 | 9782 | rg->ops->setfromoptions = RGSetFromOptions_Interval; | |
| 381 | 9782 | rg->ops->view = RGView_Interval; | |
| 382 | 9782 | rg->ops->destroy = RGDestroy_Interval; | |
| 383 |
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)); |
| 384 |
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)); |
| 385 |
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); |
| 386 | } | ||
| 387 |