| 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 | Polygonal region defined by a set of vertices | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <slepc/private/rgimpl.h> /*I "slepcrg.h" I*/ | ||
| 15 | #include <petscdraw.h> | ||
| 16 | |||
| 17 | #define VERTMAX 30 | ||
| 18 | |||
| 19 | typedef struct { | ||
| 20 | PetscInt n; /* number of vertices */ | ||
| 21 | PetscScalar *vr,*vi; /* array of vertices (vi not used in complex scalars) */ | ||
| 22 | } RG_POLYGON; | ||
| 23 | |||
| 24 | static PetscErrorCode RGComputeBoundingBox_Polygon(RG,PetscReal*,PetscReal*,PetscReal*,PetscReal*); | ||
| 25 | |||
| 26 | #if !defined(PETSC_USE_COMPLEX) | ||
| 27 | 12 | static PetscBool CheckSymmetry(PetscInt n,PetscScalar *vr,PetscScalar *vi) | |
| 28 | { | ||
| 29 | 12 | PetscInt i,j,k; | |
| 30 | /* find change of sign in imaginary part */ | ||
| 31 | 12 | j = vi[0]!=0.0? 0: 1; | |
| 32 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
12 | for (k=j+1;k<n;k++) { |
| 33 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
12 | if (vi[k]!=0.0) { |
| 34 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
12 | if (vi[k]*vi[j]<0.0) break; |
| 35 | ✗ | j++; | |
| 36 | } | ||
| 37 | } | ||
| 38 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
12 | if (k==n) return (j==1)? PETSC_TRUE: PETSC_FALSE; |
| 39 | /* check pairing vertices */ | ||
| 40 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
48 | for (i=0;i<n/2;i++) { |
| 41 |
2/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
|
36 | if (vr[k]!=vr[j] || vi[k]!=-vi[j]) return PETSC_FALSE; |
| 42 | 36 | k = (k+1)%n; | |
| 43 | 36 | j = (j-1+n)%n; | |
| 44 | } | ||
| 45 | return PETSC_TRUE; | ||
| 46 | } | ||
| 47 | #endif | ||
| 48 | |||
| 49 | 29 | static PetscErrorCode RGPolygonSetVertices_Polygon(RG rg,PetscInt n,PetscScalar *vr,PetscScalar *vi) | |
| 50 | { | ||
| 51 | 29 | PetscInt i; | |
| 52 | 29 | RG_POLYGON *ctx = (RG_POLYGON*)rg->data; | |
| 53 | |||
| 54 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
29 | PetscFunctionBegin; |
| 55 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
29 | PetscCheck(n>2,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"At least 3 vertices required, you provided %" PetscInt_FMT,n); |
| 56 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
29 | PetscCheck(n<=VERTMAX,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_OUTOFRANGE,"Too many points, maximum allowed is %d",VERTMAX); |
| 57 | #if !defined(PETSC_USE_COMPLEX) | ||
| 58 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
12 | PetscCheck(CheckSymmetry(n,vr,vi),PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONG,"In real scalars the region must be symmetric wrt real axis"); |
| 59 | #endif | ||
| 60 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
29 | if (ctx->n) { |
| 61 | ✗ | PetscCall(PetscFree(ctx->vr)); | |
| 62 | #if !defined(PETSC_USE_COMPLEX) | ||
| 63 | ✗ | PetscCall(PetscFree(ctx->vi)); | |
| 64 | #endif | ||
| 65 | } | ||
| 66 | 29 | ctx->n = n; | |
| 67 |
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.
|
29 | PetscCall(PetscMalloc1(n,&ctx->vr)); |
| 68 | #if !defined(PETSC_USE_COMPLEX) | ||
| 69 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(PetscMalloc1(n,&ctx->vi)); |
| 70 | #endif | ||
| 71 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
223 | for (i=0;i<n;i++) { |
| 72 | 194 | ctx->vr[i] = vr[i]; | |
| 73 | #if !defined(PETSC_USE_COMPLEX) | ||
| 74 | 84 | ctx->vi[i] = vi[i]; | |
| 75 | #endif | ||
| 76 | } | ||
| 77 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
| 78 | } | ||
| 79 | |||
| 80 | /*@ | ||
| 81 | RGPolygonSetVertices - Sets the vertices that define the polygon region. | ||
| 82 | |||
| 83 | Logically Collective | ||
| 84 | |||
| 85 | Input Parameters: | ||
| 86 | + rg - the region context | ||
| 87 | . n - number of vertices | ||
| 88 | . vr - array of vertices | ||
| 89 | - vi - array of vertices (imaginary part) | ||
| 90 | |||
| 91 | Options Database Keys: | ||
| 92 | + -rg_polygon_vertices <vr1,vr2,...> - comma-separated list of vertices | ||
| 93 | - -rg_polygon_verticesi <vi1,vi2,...> - comma-separated list of vertices (imaginary part) | ||
| 94 | |||
| 95 | Notes: | ||
| 96 | In the case of complex scalars, only argument `vr` is used, containing | ||
| 97 | the complex vertices; the list of vertices can be provided in the | ||
| 98 | command line with a comma-separated list of complex values | ||
| 99 | `[+/-][realnumber][+/-]realnumberi` with no spaces. | ||
| 100 | |||
| 101 | When PETSc is built with real scalars, the real and imaginary parts of | ||
| 102 | the vertices must be provided in two separate arrays (or two lists in | ||
| 103 | the command line). In this case, the region must be symmetric with | ||
| 104 | respect to the real axis. | ||
| 105 | |||
| 106 | Level: advanced | ||
| 107 | |||
| 108 | .seealso: [](sec:rg), `RGPOLYGON`, `RGPolygonGetVertices()` | ||
| 109 | @*/ | ||
| 110 | 29 | PetscErrorCode RGPolygonSetVertices(RG rg,PetscInt n,PetscScalar vr[],PetscScalar vi[]) | |
| 111 | { | ||
| 112 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
29 | PetscFunctionBegin; |
| 113 |
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.
|
29 | PetscValidHeaderSpecific(rg,RG_CLASSID,1); |
| 114 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ 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 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
29 | PetscValidLogicalCollectiveInt(rg,n,2); |
| 115 |
2/8✗ 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.
|
29 | PetscAssertPointer(vr,3); |
| 116 | #if !defined(PETSC_USE_COMPLEX) | ||
| 117 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
12 | PetscAssertPointer(vi,4); |
| 118 | #endif | ||
| 119 |
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.
|
29 | PetscTryMethod(rg,"RGPolygonSetVertices_C",(RG,PetscInt,PetscScalar*,PetscScalar*),(rg,n,vr,vi)); |
| 120 |
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.
|
29 | PetscFunctionReturn(PETSC_SUCCESS); |
| 121 | } | ||
| 122 | |||
| 123 | 20 | static PetscErrorCode RGPolygonGetVertices_Polygon(RG rg,PetscInt *n,PetscScalar *vr[],PetscScalar *vi[]) | |
| 124 | { | ||
| 125 | 20 | RG_POLYGON *ctx = (RG_POLYGON*)rg->data; | |
| 126 | 20 | PetscInt i; | |
| 127 | |||
| 128 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 129 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (n) *n = ctx->n; |
| 130 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (vr) { |
| 131 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
20 | if (!ctx->n) *vr = NULL; |
| 132 | else { | ||
| 133 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscMalloc1(ctx->n,vr)); |
| 134 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
160 | for (i=0;i<ctx->n;i++) (*vr)[i] = ctx->vr[i]; |
| 135 | } | ||
| 136 | } | ||
| 137 | #if !defined(PETSC_USE_COMPLEX) | ||
| 138 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
10 | if (vi) { |
| 139 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
10 | if (!ctx->n) *vi = NULL; |
| 140 | else { | ||
| 141 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(PetscMalloc1(ctx->n,vi)); |
| 142 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
80 | for (i=0;i<ctx->n;i++) (*vi)[i] = ctx->vi[i]; |
| 143 | } | ||
| 144 | } | ||
| 145 | #endif | ||
| 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.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
| 147 | } | ||
| 148 | |||
| 149 | /*@C | ||
| 150 | RGPolygonGetVertices - Gets the vertices that define the polygon region. | ||
| 151 | |||
| 152 | Not Collective | ||
| 153 | |||
| 154 | Input Parameter: | ||
| 155 | . rg - the region context | ||
| 156 | |||
| 157 | Output Parameters: | ||
| 158 | + n - number of vertices | ||
| 159 | . vr - array of vertices | ||
| 160 | - vi - array of vertices (imaginary part) | ||
| 161 | |||
| 162 | Notes: | ||
| 163 | The values passed by user with `RGPolygonSetVertices()` are returned (or `NULL` | ||
| 164 | pointers otherwise). | ||
| 165 | The returned arrays should be freed by the user when no longer needed. | ||
| 166 | |||
| 167 | Level: advanced | ||
| 168 | |||
| 169 | .seealso: [](sec:rg), `RGPOLYGON`, `RGPolygonSetVertices()` | ||
| 170 | @*/ | ||
| 171 | 20 | PetscErrorCode RGPolygonGetVertices(RG rg,PetscInt *n,PetscScalar *vr[],PetscScalar *vi[]) PeNS | |
| 172 | { | ||
| 173 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 174 |
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.
|
20 | PetscValidHeaderSpecific(rg,RG_CLASSID,1); |
| 175 |
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.
|
20 | PetscUseMethod(rg,"RGPolygonGetVertices_C",(RG,PetscInt*,PetscScalar**,PetscScalar**),(rg,n,vr,vi)); |
| 176 |
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.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
| 177 | } | ||
| 178 | |||
| 179 | 36 | static PetscErrorCode RGView_Polygon(RG rg,PetscViewer viewer) | |
| 180 | { | ||
| 181 | 36 | RG_POLYGON *ctx = (RG_POLYGON*)rg->data; | |
| 182 | 36 | PetscBool isdraw,isascii; | |
| 183 | 36 | int winw,winh; | |
| 184 | 36 | PetscDraw draw; | |
| 185 | 36 | PetscDrawAxis axis; | |
| 186 | 36 | PetscReal a,b,c,d,ab,cd,lx,ly,w,x0,y0,x1,y1,scale=1.2; | |
| 187 | 36 | PetscInt i; | |
| 188 | 36 | char str[50]; | |
| 189 | |||
| 190 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
36 | PetscFunctionBegin; |
| 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.
|
36 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw)); |
| 192 |
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.
|
36 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 193 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
36 | if (isascii) { |
| 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.
|
26 | PetscCall(PetscViewerASCIIPrintf(viewer," vertices: ")); |
| 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.
|
26 | PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE)); |
| 196 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
208 | for (i=0;i<ctx->n;i++) { |
| 197 | #if defined(PETSC_USE_COMPLEX) | ||
| 198 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
98 | PetscCall(SlepcSNPrintfScalar(str,sizeof(str),ctx->vr[i],PETSC_FALSE)); |
| 199 | #else | ||
| 200 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
84 | if (ctx->vi[i]!=0.0) PetscCall(PetscSNPrintf(str,sizeof(str),"%g%+gi",(double)ctx->vr[i],(double)ctx->vi[i])); |
| 201 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | else PetscCall(PetscSNPrintf(str,sizeof(str),"%g",(double)ctx->vr[i])); |
| 202 | #endif | ||
| 203 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
208 | PetscCall(PetscViewerASCIIPrintf(viewer,"%s%s",str,(i<ctx->n-1)?", ":"")); |
| 204 | } | ||
| 205 |
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.
|
26 | PetscCall(PetscViewerASCIIPrintf(viewer,"\n")); |
| 206 |
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.
|
26 | PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_TRUE)); |
| 207 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | } else if (isdraw) { |
| 208 |
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)); |
| 209 |
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)); |
| 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(PetscDrawGetWindowSize(draw,&winw,&winh)); |
| 211 | 10 | winw = PetscMax(winw,1); winh = PetscMax(winh,1); | |
| 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(PetscDrawClear(draw)); |
| 213 |
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,"Polygonal region")); |
| 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(PetscDrawAxisCreate(draw,&axis)); |
| 215 |
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(RGComputeBoundingBox_Polygon(rg,&a,&b,&c,&d)); |
| 216 | 10 | a *= rg->sfactor; | |
| 217 | 10 | b *= rg->sfactor; | |
| 218 | 10 | c *= rg->sfactor; | |
| 219 | 10 | d *= rg->sfactor; | |
| 220 | 10 | lx = b-a; | |
| 221 | 10 | ly = d-c; | |
| 222 | 10 | ab = (a+b)/2; | |
| 223 | 10 | cd = (c+d)/2; | |
| 224 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | w = scale*PetscMax(lx/winw,ly/winh)/2; |
| 225 |
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)); |
| 226 |
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)); |
| 227 |
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)); |
| 228 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
80 | for (i=0;i<ctx->n;i++) { |
| 229 | #if defined(PETSC_USE_COMPLEX) | ||
| 230 | 35 | x0 = PetscRealPart(ctx->vr[i]); y0 = PetscImaginaryPart(ctx->vr[i]); | |
| 231 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
35 | if (i<ctx->n-1) { |
| 232 | 30 | x1 = PetscRealPart(ctx->vr[i+1]); y1 = PetscImaginaryPart(ctx->vr[i+1]); | |
| 233 | } else { | ||
| 234 | 5 | x1 = PetscRealPart(ctx->vr[0]); y1 = PetscImaginaryPart(ctx->vr[0]); | |
| 235 | } | ||
| 236 | #else | ||
| 237 | 35 | x0 = ctx->vr[i]; y0 = ctx->vi[i]; | |
| 238 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
35 | if (i<ctx->n-1) { |
| 239 | 30 | x1 = ctx->vr[i+1]; y1 = ctx->vi[i+1]; | |
| 240 | } else { | ||
| 241 | 5 | x1 = ctx->vr[0]; y1 = ctx->vi[0]; | |
| 242 | } | ||
| 243 | #endif | ||
| 244 |
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.
|
70 | PetscCall(PetscDrawLine(draw,x0*rg->sfactor,y0*rg->sfactor,x1*rg->sfactor,y1*rg->sfactor,PETSC_DRAW_MAGENTA)); |
| 245 | } | ||
| 246 |
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)); |
| 247 |
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)); |
| 248 |
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)); |
| 249 | } | ||
| 250 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
| 251 | } | ||
| 252 | |||
| 253 | 58 | static PetscErrorCode RGIsTrivial_Polygon(RG rg,PetscBool *trivial) | |
| 254 | { | ||
| 255 | 58 | RG_POLYGON *ctx = (RG_POLYGON*)rg->data; | |
| 256 | |||
| 257 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
58 | PetscFunctionBegin; |
| 258 | 58 | *trivial = PetscNot(ctx->n); | |
| 259 |
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.
|
58 | PetscFunctionReturn(PETSC_SUCCESS); |
| 260 | } | ||
| 261 | |||
| 262 | 23 | static PetscErrorCode RGComputeContour_Polygon(RG rg,PetscInt n,PetscScalar *ucr,PetscScalar *uci) | |
| 263 | { | ||
| 264 | 23 | RG_POLYGON *ctx = (RG_POLYGON*)rg->data; | |
| 265 | 23 | PetscReal length,h,d,rem=0.0; | |
| 266 | 23 | PetscInt k=1,idx=ctx->n-1,i; | |
| 267 | 23 | PetscBool ini=PETSC_FALSE; | |
| 268 | 23 | PetscScalar incr,*cr=ucr,*ci=uci; | |
| 269 | #if !defined(PETSC_USE_COMPLEX) | ||
| 270 | 10 | PetscScalar inci; | |
| 271 | #endif | ||
| 272 | |||
| 273 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
23 | PetscFunctionBegin; |
| 274 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
23 | PetscCheck(ctx->n,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_WRONGSTATE,"No vertices have been set yet"); |
| 275 | 23 | length = SlepcAbsEigenvalue(ctx->vr[0]-ctx->vr[ctx->n-1],ctx->vi[0]-ctx->vi[ctx->n-1]); | |
| 276 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
162 | for (i=0;i<ctx->n-1;i++) length += SlepcAbsEigenvalue(ctx->vr[i]-ctx->vr[i+1],ctx->vi[i]-ctx->vi[i+1]); |
| 277 | 23 | h = length/n; | |
| 278 |
1/8✗ 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.
|
23 | if (!ucr) PetscCall(PetscMalloc1(n,&cr)); |
| 279 |
1/8✗ 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.
|
23 | if (!uci) PetscCall(PetscMalloc1(n,&ci)); |
| 280 | 23 | cr[0] = ctx->vr[0]; | |
| 281 | #if !defined(PETSC_USE_COMPLEX) | ||
| 282 | 10 | ci[0] = ctx->vi[0]; | |
| 283 | #endif | ||
| 284 | 23 | incr = ctx->vr[ctx->n-1]-ctx->vr[0]; | |
| 285 | #if !defined(PETSC_USE_COMPLEX) | ||
| 286 | 10 | inci = ctx->vi[ctx->n-1]-ctx->vi[0]; | |
| 287 | #endif | ||
| 288 | 23 | d = SlepcAbsEigenvalue(incr,inci); | |
| 289 | 23 | incr /= d; | |
| 290 | #if !defined(PETSC_USE_COMPLEX) | ||
| 291 | 10 | inci /= d; | |
| 292 | #endif | ||
| 293 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
629 | while (k<n) { |
| 294 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
606 | if (ini) { |
| 295 | 129 | incr = ctx->vr[idx]-ctx->vr[idx+1]; | |
| 296 | #if !defined(PETSC_USE_COMPLEX) | ||
| 297 | 60 | inci = ctx->vi[idx]-ctx->vi[idx+1]; | |
| 298 | #endif | ||
| 299 | 129 | d = SlepcAbsEigenvalue(incr,inci); | |
| 300 | 129 | incr /= d; | |
| 301 | #if !defined(PETSC_USE_COMPLEX) | ||
| 302 | 60 | inci /= d; | |
| 303 | #endif | ||
| 304 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
129 | if (rem+d>h) { |
| 305 | 129 | cr[k] = ctx->vr[idx+1]+incr*(h-rem); | |
| 306 | #if !defined(PETSC_USE_COMPLEX) | ||
| 307 | 60 | ci[k] = ctx->vi[idx+1]+inci*(h-rem); | |
| 308 | #endif | ||
| 309 | 129 | k++; | |
| 310 | 129 | ini = PETSC_FALSE; | |
| 311 | ✗ | } else {rem += d; idx--;} | |
| 312 | } else { | ||
| 313 | #if !defined(PETSC_USE_COMPLEX) | ||
| 314 | 90 | rem = SlepcAbsEigenvalue(ctx->vr[idx]-cr[k-1],ctx->vi[idx]-ci[k-1]); | |
| 315 | #else | ||
| 316 | 387 | rem = PetscAbsScalar(ctx->vr[idx]-cr[k-1]); | |
| 317 | #endif | ||
| 318 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
477 | if (rem>h) { |
| 319 | 348 | cr[k] = cr[k-1]+incr*h; | |
| 320 | #if !defined(PETSC_USE_COMPLEX) | ||
| 321 | 30 | ci[k] = ci[k-1]+inci*h; | |
| 322 | #endif | ||
| 323 | 348 | k++; | |
| 324 | 129 | } else {ini = PETSC_TRUE; idx--;} | |
| 325 | } | ||
| 326 | } | ||
| 327 |
1/10✗ 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.
|
23 | if (!ucr) PetscCall(PetscFree(cr)); |
| 328 |
1/10✗ 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.
|
23 | if (!uci) PetscCall(PetscFree(ci)); |
| 329 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
| 330 | } | ||
| 331 | |||
| 332 | 30 | static PetscErrorCode RGComputeBoundingBox_Polygon(RG rg,PetscReal *a,PetscReal *b,PetscReal *c,PetscReal *d) | |
| 333 | { | ||
| 334 | 30 | RG_POLYGON *ctx = (RG_POLYGON*)rg->data; | |
| 335 | 30 | PetscInt i; | |
| 336 | |||
| 337 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
| 338 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (a) *a = PETSC_MAX_REAL; |
| 339 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (b) *b = -PETSC_MAX_REAL; |
| 340 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (c) *c = PETSC_MAX_REAL; |
| 341 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (d) *d = -PETSC_MAX_REAL; |
| 342 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
240 | for (i=0;i<ctx->n;i++) { |
| 343 | #if defined(PETSC_USE_COMPLEX) | ||
| 344 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
120 | if (a) *a = PetscMin(*a,PetscRealPart(ctx->vr[i])); |
| 345 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
120 | if (b) *b = PetscMax(*b,PetscRealPart(ctx->vr[i])); |
| 346 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
150 | if (c) *c = PetscMin(*c,PetscImaginaryPart(ctx->vr[i])); |
| 347 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
165 | if (d) *d = PetscMax(*d,PetscImaginaryPart(ctx->vr[i])); |
| 348 | #else | ||
| 349 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
135 | if (a) *a = PetscMin(*a,ctx->vr[i]); |
| 350 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
150 | if (b) *b = PetscMax(*b,ctx->vr[i]); |
| 351 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
150 | if (c) *c = PetscMin(*c,ctx->vi[i]); |
| 352 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
195 | if (d) *d = PetscMax(*d,ctx->vi[i]); |
| 353 | #endif | ||
| 354 | } | ||
| 355 |
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); |
| 356 | } | ||
| 357 | |||
| 358 | 17858 | static PetscErrorCode RGCheckInside_Polygon(RG rg,PetscReal px,PetscReal py,PetscInt *inout) | |
| 359 | { | ||
| 360 | 17858 | RG_POLYGON *ctx = (RG_POLYGON*)rg->data; | |
| 361 | 17858 | PetscReal val,x[VERTMAX],y[VERTMAX]; | |
| 362 | 17858 | PetscBool mx,my,nx,ny; | |
| 363 | 17858 | PetscInt i,j; | |
| 364 | |||
| 365 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
17858 | PetscFunctionBegin; |
| 366 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
89368 | for (i=0;i<ctx->n;i++) { |
| 367 | #if defined(PETSC_USE_COMPLEX) | ||
| 368 | 71426 | x[i] = PetscRealPart(ctx->vr[i])-px; | |
| 369 | 71426 | y[i] = PetscImaginaryPart(ctx->vr[i])-py; | |
| 370 | #else | ||
| 371 | 84 | x[i] = ctx->vr[i]-px; | |
| 372 | 84 | y[i] = ctx->vi[i]-py; | |
| 373 | #endif | ||
| 374 | } | ||
| 375 | 17858 | *inout = -1; | |
| 376 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
89368 | for (i=0;i<ctx->n;i++) { |
| 377 | 71510 | j = (i+1)%ctx->n; | |
| 378 | 71510 | mx = PetscNot(x[i]<0.0); | |
| 379 | 71510 | nx = PetscNot(x[j]<0.0); | |
| 380 | 71510 | my = PetscNot(y[i]<0.0); | |
| 381 | 71510 | ny = PetscNot(y[j]<0.0); | |
| 382 |
6/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 5 times.
|
71510 | if (!((my||ny) && (mx||nx)) || (mx&&nx)) continue; |
| 383 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
6817 | if (((my && ny && (mx||nx)) && (!(mx&&nx)))) { |
| 384 | 5879 | *inout = -*inout; | |
| 385 | 5879 | continue; | |
| 386 | } | ||
| 387 | 938 | val = (y[i]*x[j]-x[i]*y[j])/(x[j]-x[i]); | |
| 388 |
3/4✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
|
938 | if (PetscAbs(val)<10*PETSC_MACHINE_EPSILON) { |
| 389 | ✗ | *inout = 0; | |
| 390 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 391 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
|
938 | } else if (val>0.0) *inout = -*inout; |
| 392 | } | ||
| 393 |
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.
|
5948 | PetscFunctionReturn(PETSC_SUCCESS); |
| 394 | } | ||
| 395 | |||
| 396 | 29 | static PetscErrorCode RGSetFromOptions_Polygon(RG rg,PetscOptionItems PetscOptionsObject) | |
| 397 | { | ||
| 398 | 29 | PetscScalar array[VERTMAX]; | |
| 399 | 29 | PetscInt i,k; | |
| 400 | 29 | PetscBool flg,flgi=PETSC_FALSE; | |
| 401 | #if !defined(PETSC_USE_COMPLEX) | ||
| 402 | 12 | PetscScalar arrayi[VERTMAX]; | |
| 403 | 12 | PetscInt ki; | |
| 404 | #else | ||
| 405 | 17 | PetscScalar *arrayi=NULL; | |
| 406 | #endif | ||
| 407 | |||
| 408 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
29 | PetscFunctionBegin; |
| 409 |
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.
|
29 | PetscOptionsHeadBegin(PetscOptionsObject,"RG Polygon Options"); |
| 410 | |||
| 411 | 29 | k = VERTMAX; | |
| 412 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
899 | for (i=0;i<k;i++) array[i] = 0; |
| 413 |
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.
|
29 | PetscCall(PetscOptionsScalarArray("-rg_polygon_vertices","Vertices of polygon","RGPolygonSetVertices",array,&k,&flg)); |
| 414 | #if !defined(PETSC_USE_COMPLEX) | ||
| 415 | 12 | ki = VERTMAX; | |
| 416 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
372 | for (i=0;i<ki;i++) arrayi[i] = 0; |
| 417 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(PetscOptionsScalarArray("-rg_polygon_verticesi","Vertices of polygon (imaginary part)","RGPolygonSetVertices",arrayi,&ki,&flgi)); |
| 418 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
12 | PetscCheck(ki==k,PetscObjectComm((PetscObject)rg),PETSC_ERR_ARG_SIZ,"The number of real %" PetscInt_FMT " and imaginary %" PetscInt_FMT " parts do not match",k,ki); |
| 419 | #endif | ||
| 420 |
6/10✓ Branch 0 taken 8 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 7 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
29 | if (flg || flgi) PetscCall(RGPolygonSetVertices(rg,k,array,arrayi)); |
| 421 | |||
| 422 |
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.
|
29 | PetscOptionsHeadEnd(); |
| 423 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
| 424 | } | ||
| 425 | |||
| 426 | 29 | static PetscErrorCode RGDestroy_Polygon(RG rg) | |
| 427 | { | ||
| 428 | 29 | RG_POLYGON *ctx = (RG_POLYGON*)rg->data; | |
| 429 | |||
| 430 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
29 | PetscFunctionBegin; |
| 431 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
29 | if (ctx->n) { |
| 432 |
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.
|
29 | PetscCall(PetscFree(ctx->vr)); |
| 433 | #if !defined(PETSC_USE_COMPLEX) | ||
| 434 |
5/8✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
12 | PetscCall(PetscFree(ctx->vi)); |
| 435 | #endif | ||
| 436 | } | ||
| 437 |
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.
|
29 | PetscCall(PetscFree(rg->data)); |
| 438 |
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.
|
29 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGPolygonSetVertices_C",NULL)); |
| 439 |
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.
|
29 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGPolygonGetVertices_C",NULL)); |
| 440 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
| 441 | } | ||
| 442 | |||
| 443 | /*MC | ||
| 444 | RGPOLYGON - RGPOLYGON = "polygon" - A polygonal region defined by its | ||
| 445 | vertices, given via `RGPolygonSetVertices()`. | ||
| 446 | |||
| 447 | Note: | ||
| 448 | The following figure shows an example of a polygonal region. | ||
| 449 | |||
| 450 |  | ||
| 451 | |||
| 452 | Level: beginner | ||
| 453 | |||
| 454 | .seealso: [](sec:rg), `RG`, `RGType`, `RGSetType()`, `RGPolygonSetVertices()` | ||
| 455 | M*/ | ||
| 456 | |||
| 457 | 29 | SLEPC_EXTERN PetscErrorCode RGCreate_Polygon(RG rg) | |
| 458 | { | ||
| 459 | 29 | RG_POLYGON *polygon; | |
| 460 | |||
| 461 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
29 | PetscFunctionBegin; |
| 462 |
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.
|
29 | PetscCall(PetscNew(&polygon)); |
| 463 | 29 | rg->data = (void*)polygon; | |
| 464 | |||
| 465 | 29 | rg->ops->istrivial = RGIsTrivial_Polygon; | |
| 466 | 29 | rg->ops->computecontour = RGComputeContour_Polygon; | |
| 467 | 29 | rg->ops->computebbox = RGComputeBoundingBox_Polygon; | |
| 468 | 29 | rg->ops->checkinside = RGCheckInside_Polygon; | |
| 469 | 29 | rg->ops->setfromoptions = RGSetFromOptions_Polygon; | |
| 470 | 29 | rg->ops->view = RGView_Polygon; | |
| 471 | 29 | rg->ops->destroy = RGDestroy_Polygon; | |
| 472 |
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.
|
29 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGPolygonSetVertices_C",RGPolygonSetVertices_Polygon)); |
| 473 |
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.
|
29 | PetscCall(PetscObjectComposeFunction((PetscObject)rg,"RGPolygonGetVertices_C",RGPolygonGetVertices_Polygon)); |
| 474 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
| 475 | } | ||
| 476 |