| 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 | #include <slepc/private/dsimpl.h> /*I "slepcds.h" I*/ | ||
| 12 | #include <slepcblaslapack.h> | ||
| 13 | |||
| 14 | typedef struct { | ||
| 15 | PetscInt nf; /* number of functions in f[] */ | ||
| 16 | FN f[DS_NUM_EXTRA]; /* functions defining the nonlinear operator */ | ||
| 17 | PetscInt max_mid; /* maximum minimality index */ | ||
| 18 | PetscInt nnod; /* number of nodes for quadrature rules */ | ||
| 19 | PetscInt spls; /* number of sampling columns for quadrature rules */ | ||
| 20 | PetscInt Nit; /* number of refinement iterations */ | ||
| 21 | PetscReal rtol; /* tolerance of Newton refinement */ | ||
| 22 | RG rg; /* region for contour integral */ | ||
| 23 | PetscLayout map; /* used to distribute work among MPI processes */ | ||
| 24 | void *computematrixctx; | ||
| 25 | DSNEPMatrixFunctionFn *computematrix; | ||
| 26 | } DS_NEP; | ||
| 27 | |||
| 28 | /* | ||
| 29 | DSNEPComputeMatrix - Build the matrix associated with a nonlinear operator | ||
| 30 | T(lambda) or its derivative T'(lambda), given the parameter lambda, where | ||
| 31 | T(lambda) = sum_i E_i*f_i(lambda). The result is written in mat. | ||
| 32 | */ | ||
| 33 | 17215 | static PetscErrorCode DSNEPComputeMatrix(DS ds,PetscScalar lambda,PetscBool deriv,DSMatType mat) | |
| 34 | { | ||
| 35 | 17215 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 36 | 17215 | PetscScalar *T,alpha; | |
| 37 | 17215 | const PetscScalar *E; | |
| 38 | 17215 | PetscInt i,ld,n; | |
| 39 | 17215 | PetscBLASInt k,inc=1; | |
| 40 | |||
| 41 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
17215 | PetscFunctionBegin; |
| 42 |
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.
|
17215 | PetscCall(PetscLogEventBegin(DS_Other,ds,0,0,0)); |
| 43 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
|
17215 | if (ctx->computematrix) PetscCall((*ctx->computematrix)(ds,lambda,deriv,mat,ctx->computematrixctx)); |
| 44 | else { | ||
| 45 |
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.
|
6120 | PetscCall(DSGetDimensions(ds,&n,NULL,NULL,NULL)); |
| 46 |
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.
|
6120 | PetscCall(DSGetLeadingDimension(ds,&ld)); |
| 47 |
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.
|
6120 | PetscCall(PetscBLASIntCast(ld*n,&k)); |
| 48 |
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.
|
6120 | PetscCall(MatDenseGetArray(ds->omat[mat],&T)); |
| 49 |
4/6✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6120 | PetscCall(PetscArrayzero(T,k)); |
| 50 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
25034 | for (i=0;i<ctx->nf;i++) { |
| 51 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
|
18914 | if (deriv) PetscCall(FNEvaluateDerivative(ctx->f[i],lambda,&alpha)); |
| 52 |
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.
|
18337 | else PetscCall(FNEvaluateFunction(ctx->f[i],lambda,&alpha)); |
| 53 |
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.
|
18914 | PetscCall(MatDenseGetArrayRead(ds->omat[DSMatExtra[i]],&E)); |
| 54 |
10/20✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
18914 | PetscCallBLAS("BLASaxpy",BLASaxpy_(&k,&alpha,E,&inc,T,&inc)); |
| 55 |
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.
|
18914 | PetscCall(MatDenseRestoreArrayRead(ds->omat[DSMatExtra[i]],&E)); |
| 56 | } | ||
| 57 |
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.
|
6120 | PetscCall(MatDenseRestoreArray(ds->omat[mat],&T)); |
| 58 | } | ||
| 59 |
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.
|
17215 | PetscCall(PetscLogEventEnd(DS_Other,ds,0,0,0)); |
| 60 |
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.
|
3461 | PetscFunctionReturn(PETSC_SUCCESS); |
| 61 | } | ||
| 62 | |||
| 63 | 317 | static PetscErrorCode DSAllocate_NEP(DS ds,PetscInt ld) | |
| 64 | { | ||
| 65 | 317 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 66 | 317 | PetscInt i; | |
| 67 | |||
| 68 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
317 | PetscFunctionBegin; |
| 69 |
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.
|
317 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_X)); |
| 70 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
1178 | for (i=0;i<ctx->nf;i++) PetscCall(DSAllocateMat_Private(ds,DSMatExtra[i])); |
| 71 |
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.
|
317 | PetscCall(PetscFree(ds->perm)); |
| 72 |
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.
|
317 | PetscCall(PetscMalloc1(ld*ctx->max_mid,&ds->perm)); |
| 73 |
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.
|
64 | PetscFunctionReturn(PETSC_SUCCESS); |
| 74 | } | ||
| 75 | |||
| 76 | 20 | static PetscErrorCode DSView_NEP(DS ds,PetscViewer viewer) | |
| 77 | { | ||
| 78 | 20 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 79 | 20 | PetscViewerFormat format; | |
| 80 | 20 | PetscInt i; | |
| 81 | 20 | const char *methodname[] = { | |
| 82 | "Successive Linear Problems", | ||
| 83 | "Contour Integral" | ||
| 84 | }; | ||
| 85 | 20 | const int nmeth=PETSC_STATIC_ARRAY_LENGTH(methodname); | |
| 86 | |||
| 87 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 88 |
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(PetscViewerGetFormat(viewer,&format)); |
| 89 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) { |
| 90 |
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.
|
20 | if (ds->method<nmeth) PetscCall(PetscViewerASCIIPrintf(viewer,"solving the problem with: %s\n",methodname[ds->method])); |
| 91 | #if defined(PETSC_USE_COMPLEX) | ||
| 92 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
15 | if (ds->method==1) { /* contour integral method */ |
| 93 |
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(PetscViewerASCIIPrintf(viewer,"number of integration points: %" PetscInt_FMT "\n",ctx->nnod)); |
| 94 |
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(PetscViewerASCIIPrintf(viewer,"maximum minimality index: %" PetscInt_FMT "\n",ctx->max_mid)); |
| 95 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 5 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.
|
10 | if (ctx->spls) PetscCall(PetscViewerASCIIPrintf(viewer,"number of sampling columns for quadrature: %" PetscInt_FMT "\n",ctx->spls)); |
| 96 |
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.
|
10 | if (ctx->Nit) PetscCall(PetscViewerASCIIPrintf(viewer,"doing iterative refinement (%" PetscInt_FMT " its, tolerance %g)\n",ctx->Nit,(double)ctx->rtol)); |
| 97 |
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(RGView(ctx->rg,viewer)); |
| 98 | } | ||
| 99 | #endif | ||
| 100 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
✓ 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.
|
20 | if (format == PETSC_VIEWER_ASCII_INFO_DETAIL) PetscCall(PetscViewerASCIIPrintf(viewer,"number of functions: %" PetscInt_FMT "\n",ctx->nf)); |
| 101 |
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); |
| 102 | } | ||
| 103 | ✗ | for (i=0;i<ctx->nf;i++) { | |
| 104 | ✗ | PetscCall(FNView(ctx->f[i],viewer)); | |
| 105 | ✗ | PetscCall(DSViewMat(ds,viewer,DSMatExtra[i])); | |
| 106 | } | ||
| 107 | ✗ | if (ds->state>DS_STATE_INTERMEDIATE) PetscCall(DSViewMat(ds,viewer,DS_MAT_X)); | |
| 108 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 109 | } | ||
| 110 | |||
| 111 | 266 | static PetscErrorCode DSVectors_NEP(DS ds,DSMatType mat,PetscInt *j,PetscReal *rnorm) | |
| 112 | { | ||
| 113 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
266 | PetscFunctionBegin; |
| 114 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
266 | PetscCheck(!rnorm,PetscObjectComm((PetscObject)ds),PETSC_ERR_SUP,"Not implemented yet"); |
| 115 |
1/3✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
|
266 | switch (mat) { |
| 116 | case DS_MAT_X: | ||
| 117 | 54 | break; | |
| 118 | ✗ | case DS_MAT_Y: | |
| 119 | ✗ | SETERRQ(PetscObjectComm((PetscObject)ds),PETSC_ERR_SUP,"Not implemented yet"); | |
| 120 | ✗ | default: | |
| 121 | ✗ | SETERRQ(PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Invalid mat parameter"); | |
| 122 | } | ||
| 123 |
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.
|
54 | PetscFunctionReturn(PETSC_SUCCESS); |
| 124 | } | ||
| 125 | |||
| 126 | 148 | static PetscErrorCode DSSort_NEP(DS ds,PetscScalar *wr,PetscScalar *wi,PetscScalar *rr,PetscScalar *ri,PetscInt *dummy) | |
| 127 | { | ||
| 128 | 148 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 129 | 148 | PetscInt n,l,i,*perm,lds; | |
| 130 | 148 | PetscScalar *Q; | |
| 131 | |||
| 132 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
148 | PetscFunctionBegin; |
| 133 |
2/14✓ Branch 0 taken 8 times.
✓ 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.
|
148 | if (!ds->sc) PetscFunctionReturn(PETSC_SUCCESS); |
| 134 |
8/14✓ Branch 0 taken 6 times.
✓ Branch 1 taken 9 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 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.
|
148 | if (!ds->method) PetscFunctionReturn(PETSC_SUCCESS); /* SLP computes just one eigenvalue */ |
| 135 | 133 | n = ds->n*ctx->max_mid; | |
| 136 | 133 | lds = ds->ld*ctx->max_mid; | |
| 137 | 133 | l = ds->l; | |
| 138 | 133 | perm = ds->perm; | |
| 139 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
5039 | for (i=0;i<n;i++) perm[i] = i; |
| 140 |
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.
|
133 | if (rr) PetscCall(DSSortEigenvalues_Private(ds,rr,ri,perm,PETSC_FALSE)); |
| 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.
|
15 | else PetscCall(DSSortEigenvalues_Private(ds,wr,NULL,perm,PETSC_FALSE)); |
| 142 |
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.
|
133 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 143 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
760 | for (i=l;i<ds->t;i++) Q[i+i*lds] = wr[perm[i]]; |
| 144 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
760 | for (i=l;i<ds->t;i++) wr[i] = Q[i+i*lds]; |
| 145 |
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.
|
133 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Q],&Q)); |
| 146 | /* n != ds->n */ | ||
| 147 |
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.
|
133 | PetscCall(DSPermuteColumns_Private(ds,0,ds->t,ds->n,DS_MAT_X,perm)); |
| 148 |
6/12✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
27 | PetscFunctionReturn(PETSC_SUCCESS); |
| 149 | } | ||
| 150 | |||
| 151 | #if defined(SLEPC_MISSING_LAPACK_GGEV3) | ||
| 152 | #define LAPGEEV "ggev" | ||
| 153 | #else | ||
| 154 | #define LAPGEEV "ggev3" | ||
| 155 | #endif | ||
| 156 | |||
| 157 | 1730 | static PetscErrorCode DSSolve_NEP_SLP(DS ds,PetscScalar *wr,PetscScalar *wi) | |
| 158 | { | ||
| 159 | 1730 | PetscScalar *A,*B,*W,*X,*work,*alpha,*beta,a; | |
| 160 | 1730 | PetscScalar sigma,lambda,mu,re,re2,sone=1.0,szero=0.0; | |
| 161 | 1730 | PetscBLASInt info,n,ld,lwork,one=1,zero=0; | |
| 162 | 1730 | PetscInt it,pos,j,maxit=100,result; | |
| 163 | 1730 | PetscReal norm,tol,done=1.0; | |
| 164 | #if !defined(PETSC_USE_COMPLEX) | ||
| 165 | 925 | PetscReal *alphai,im,im2; | |
| 166 | #endif | ||
| 167 | |||
| 168 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1730 | PetscFunctionBegin; |
| 169 |
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.
|
1730 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 170 |
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.
|
1730 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 171 |
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.
|
1730 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_A)); |
| 172 |
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.
|
1730 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_B)); |
| 173 |
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.
|
1730 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_W)); |
| 174 |
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.
|
1730 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&A)); |
| 175 |
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.
|
1730 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&B)); |
| 176 |
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.
|
1730 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_W],&W)); |
| 177 |
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.
|
1730 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_X],&X)); |
| 178 | |||
| 179 | /* workspace query and memory allocation */ | ||
| 180 | 1730 | lwork = -1; | |
| 181 | #if defined(PETSC_USE_COMPLEX) | ||
| 182 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
805 | PetscCallBLAS("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&n,A,&ld,B,&ld,NULL,NULL,NULL,&ld,W,&ld,&a,&lwork,NULL,&info)); |
| 183 |
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.
|
805 | PetscCall(PetscBLASIntCast((PetscInt)PetscRealPart(a),&lwork)); |
| 184 |
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.
|
805 | PetscCall(DSAllocateWork_Private(ds,lwork+2*ds->n,8*ds->n,0)); |
| 185 | 805 | alpha = ds->work; | |
| 186 | 805 | beta = ds->work + ds->n; | |
| 187 | 805 | work = ds->work + 2*ds->n; | |
| 188 | #else | ||
| 189 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
925 | PetscCallBLAS("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&n,A,&ld,B,&ld,NULL,NULL,NULL,NULL,&ld,W,&ld,&a,&lwork,&info)); |
| 190 |
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.
|
925 | PetscCall(PetscBLASIntCast((PetscInt)a,&lwork)); |
| 191 |
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.
|
925 | PetscCall(DSAllocateWork_Private(ds,lwork+3*ds->n,0,0)); |
| 192 | 925 | alpha = ds->work; | |
| 193 | 925 | beta = ds->work + ds->n; | |
| 194 | 925 | alphai = ds->work + 2*ds->n; | |
| 195 | 925 | work = ds->work + 3*ds->n; | |
| 196 | #endif | ||
| 197 | |||
| 198 | 1730 | sigma = 0.0; | |
| 199 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
1730 | if (ds->sc->comparison==SlepcCompareTargetMagnitude || ds->sc->comparison==SlepcCompareTargetReal) sigma = *(PetscScalar*)ds->sc->comparisonctx; |
| 200 | 1730 | lambda = sigma; | |
| 201 | 1730 | tol = n*PETSC_MACHINE_EPSILON/PetscSqrtReal(PETSC_SQRT_MACHINE_EPSILON); | |
| 202 | |||
| 203 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
5430 | for (it=0;it<maxit;it++) { |
| 204 | |||
| 205 | /* evaluate T and T' */ | ||
| 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.
|
5430 | PetscCall(DSNEPComputeMatrix(ds,lambda,PETSC_FALSE,DS_MAT_A)); |
| 207 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5430 | if (it) { |
| 208 |
10/20✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
3700 | PetscCallBLAS("BLASgemv",BLASgemv_("N",&n,&n,&sone,A,&ld,X,&one,&szero,X+ld,&one)); |
| 209 | 3700 | norm = BLASnrm2_(&n,X+ld,&one); | |
| 210 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3700 | if (norm/PetscAbsScalar(lambda)<=tol) break; |
| 211 | } | ||
| 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.
|
3700 | PetscCall(DSNEPComputeMatrix(ds,lambda,PETSC_TRUE,DS_MAT_B)); |
| 213 | |||
| 214 | /* compute eigenvalue correction mu and eigenvector u */ | ||
| 215 | #if defined(PETSC_USE_COMPLEX) | ||
| 216 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
1735 | PetscCallBLAS("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&n,A,&ld,B,&ld,alpha,beta,NULL,&ld,W,&ld,work,&lwork,ds->rwork,&info)); |
| 217 | #else | ||
| 218 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
1965 | PetscCallBLAS("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&n,A,&ld,B,&ld,alpha,alphai,beta,NULL,&ld,W,&ld,work,&lwork,&info)); |
| 219 | #endif | ||
| 220 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
3700 | SlepcCheckLapackInfo(LAPGEEV,info); |
| 221 | |||
| 222 | /* find smallest eigenvalue */ | ||
| 223 | 3700 | j = 0; | |
| 224 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
3700 | if (beta[j]==0.0) re = (PetscRealPart(alpha[j])>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 225 | 3700 | else re = alpha[j]/beta[j]; | |
| 226 | #if !defined(PETSC_USE_COMPLEX) | ||
| 227 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1965 | if (beta[j]==0.0) im = (alphai[j]>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 228 | 1965 | else im = alphai[j]/beta[j]; | |
| 229 | #endif | ||
| 230 | pos = 0; | ||
| 231 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
16335 | for (j=1;j<n;j++) { |
| 232 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
12635 | if (beta[j]==0.0) re2 = (PetscRealPart(alpha[j])>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 233 | 12635 | else re2 = alpha[j]/beta[j]; | |
| 234 | #if !defined(PETSC_USE_COMPLEX) | ||
| 235 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
7350 | if (beta[j]==0.0) im2 = (alphai[j]>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 236 | 7350 | else im2 = alphai[j]/beta[j]; | |
| 237 |
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.
|
7350 | PetscCall(SlepcCompareSmallestMagnitude(re,im,re2,im2,&result,NULL)); |
| 238 | #else | ||
| 239 |
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.
|
5285 | PetscCall(SlepcCompareSmallestMagnitude(re,0.0,re2,0.0,&result,NULL)); |
| 240 | #endif | ||
| 241 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
12635 | if (result > 0) { |
| 242 | 7593 | re = re2; | |
| 243 | #if !defined(PETSC_USE_COMPLEX) | ||
| 244 | 4703 | im = im2; | |
| 245 | #endif | ||
| 246 | 7593 | pos = j; | |
| 247 | } | ||
| 248 | } | ||
| 249 | |||
| 250 | #if !defined(PETSC_USE_COMPLEX) | ||
| 251 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1965 | PetscCheck(im==0.0,PETSC_COMM_SELF,PETSC_ERR_SUP,"DSNEP found a complex eigenvalue; try rerunning with complex scalars"); |
| 252 | #endif | ||
| 253 | 3700 | mu = alpha[pos]/beta[pos]; | |
| 254 |
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.
|
3700 | PetscCall(PetscArraycpy(X,W+pos*ld,n)); |
| 255 | 3700 | norm = BLASnrm2_(&n,X,&one); | |
| 256 |
10/20✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
3700 | PetscCallBLAS("LAPACKlascl",LAPACKlascl_("G",&zero,&zero,&norm,&done,&n,&one,X,&n,&info)); |
| 257 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
3700 | SlepcCheckLapackInfo("lascl",info); |
| 258 | |||
| 259 | /* correct eigenvalue approximation */ | ||
| 260 | 3700 | lambda = lambda - mu; | |
| 261 | } | ||
| 262 |
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.
|
1730 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&A)); |
| 263 |
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.
|
1730 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&B)); |
| 264 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1730 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_W],&W)); |
| 265 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1730 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_X],&X)); |
| 266 | |||
| 267 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1730 | PetscCheck(it<maxit,PETSC_COMM_SELF,PETSC_ERR_CONV_FAILED,"DSNEP did not converge"); |
| 268 | 1730 | ds->t = 1; | |
| 269 | 1730 | wr[0] = lambda; | |
| 270 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1730 | if (wi) wi[0] = 0.0; |
| 271 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
346 | PetscFunctionReturn(PETSC_SUCCESS); |
| 272 | } | ||
| 273 | |||
| 274 | #if defined(PETSC_USE_COMPLEX) | ||
| 275 | /* | ||
| 276 | Newton refinement for eigenpairs computed with contour integral. | ||
| 277 | k - number of eigenpairs to refine | ||
| 278 | wr - eigenvalues (eigenvectors are stored in DS_MAT_X) | ||
| 279 | */ | ||
| 280 | 133 | static PetscErrorCode DSNEPNewtonRefine(DS ds,PetscInt k,PetscScalar *wr) | |
| 281 | { | ||
| 282 | 133 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 283 | 133 | PetscScalar *X,*W,*U,*R,sone=1.0,szero=0.0; | |
| 284 | 133 | PetscReal norm; | |
| 285 | 133 | PetscInt i,j,ii,nwu=0,*p,jstart=0,jend=k; | |
| 286 | 133 | const PetscInt *range; | |
| 287 | 133 | PetscBLASInt n,*perm,info,ld,one=1,n1; | |
| 288 | 133 | PetscMPIInt len,size,root; | |
| 289 | 133 | PetscLayout map; | |
| 290 | |||
| 291 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
133 | PetscFunctionBegin; |
| 292 |
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.
|
133 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_X],&X)); |
| 293 |
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.
|
133 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 294 |
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.
|
133 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 295 | 133 | n1 = n+1; | |
| 296 | 133 | p = ds->perm; | |
| 297 |
4/6✓ Branch 0 taken 3 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
133 | PetscCall(PetscArrayzero(p,k)); |
| 298 |
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.
|
133 | PetscCall(DSAllocateWork_Private(ds,(n+2)*(n+1),0,n+1)); |
| 299 | 133 | U = ds->work+nwu; nwu += (n+1)*(n+1); | |
| 300 | 133 | R = ds->work+nwu; /*nwu += n+1;*/ | |
| 301 | 133 | perm = ds->iwork; | |
| 302 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
133 | if (ds->pmode==DS_PARALLEL_DISTRIBUTED) { |
| 303 |
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.
|
20 | PetscCall(PetscLayoutCreateFromSizes(PetscObjectComm((PetscObject)ds),PETSC_DECIDE,k,1,&map)); |
| 304 |
3/6✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
20 | PetscCall(PetscLayoutGetRange(map,&jstart,&jend)); |
| 305 | } | ||
| 306 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
517 | for (ii=0;ii<ctx->Nit;ii++) { |
| 307 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2040 | for (j=jstart;j<jend;j++) { |
| 308 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1656 | if (p[j]<2) { |
| 309 |
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.
|
670 | PetscCall(DSNEPComputeMatrix(ds,wr[j],PETSC_FALSE,DS_MAT_W)); |
| 310 |
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.
|
670 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_W],&W)); |
| 311 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
670 | PetscCallBLAS("BLASgemv",BLASgemv_("N",&n,&n,&sone,W,&ld,X+ld*j,&one,&szero,R,&one)); |
| 312 |
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.
|
670 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_W],&W)); |
| 313 | 670 | norm = BLASnrm2_(&n,R,&one); | |
| 314 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
670 | if (norm/PetscAbsScalar(wr[j]) > ctx->rtol) { |
| 315 |
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.
|
103 | PetscCall(PetscInfo(NULL,"Refining eigenpair %" PetscInt_FMT ", residual=%g\n",j,(double)(norm/PetscAbsScalar(wr[j])))); |
| 316 | 103 | p[j] = 1; | |
| 317 | 103 | R[n] = 0.0; | |
| 318 |
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.
|
103 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_W],&W)); |
| 319 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1716 | for (i=0;i<n;i++) { |
| 320 |
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.
|
1613 | PetscCall(PetscArraycpy(U+i*n1,W+i*ld,n)); |
| 321 | 1613 | U[n+i*n1] = PetscConj(X[j*ld+i]); | |
| 322 | } | ||
| 323 |
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.
|
103 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_W],&W)); |
| 324 | 103 | U[n+n*n1] = 0.0; | |
| 325 |
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.
|
103 | PetscCall(DSNEPComputeMatrix(ds,wr[j],PETSC_TRUE,DS_MAT_W)); |
| 326 |
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.
|
103 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_W],&W)); |
| 327 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
103 | PetscCallBLAS("BLASgemv",BLASgemv_("N",&n,&n,&sone,W,&ld,X+ld*j,&one,&szero,U+n*(n+1),&one)); |
| 328 |
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.
|
103 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_W],&W)); |
| 329 | /* solve system */ | ||
| 330 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
103 | PetscCallBLAS("LAPACKgetrf",LAPACKgetrf_(&n1,&n1,U,&n1,perm,&info)); |
| 331 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
103 | SlepcCheckLapackInfo("getrf",info); |
| 332 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
103 | PetscCallBLAS("LAPACKgetrs",LAPACKgetrs_("N",&n1,&one,U,&n1,perm,R,&n1,&info)); |
| 333 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
103 | SlepcCheckLapackInfo("getrs",info); |
| 334 | 103 | wr[j] -= R[n]; | |
| 335 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1716 | for (i=0;i<n;i++) X[j*ld+i] -= R[i]; |
| 336 | /* normalization */ | ||
| 337 | 103 | norm = BLASnrm2_(&n,X+ld*j,&one); | |
| 338 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1819 | for (i=0;i<n;i++) X[ld*j+i] /= norm; |
| 339 | 567 | } else p[j] = 2; | |
| 340 | } | ||
| 341 | } | ||
| 342 | } | ||
| 343 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
133 | if (ds->pmode==DS_PARALLEL_DISTRIBUTED) { /* communicate results */ |
| 344 |
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.
|
20 | PetscCall(PetscMPIIntCast(k,&len)); |
| 345 |
28/58✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 1 times.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 1 times.
✓ Branch 50 taken 1 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
|
20 | PetscCallMPI(MPIU_Allreduce(MPI_IN_PLACE,p,len,MPIU_INT,MPI_SUM,PetscObjectComm((PetscObject)ds))); |
| 346 |
14/28✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
20 | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)ds),&size)); |
| 347 |
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.
|
20 | PetscCall(PetscLayoutGetRanges(map,&range)); |
| 348 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
100 | for (j=0;j<k;j++) { |
| 349 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
80 | if (p[j]) { /* j-th eigenpair has been refined */ |
| 350 |
3/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
|
200 | for (root=0;root<size;root++) if (range[root+1]>j) break; |
| 351 |
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.
|
80 | PetscCall(PetscMPIIntCast(1,&len)); |
| 352 |
15/30✓ 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 taken 4 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
160 | PetscCallMPI(MPI_Bcast(wr+j,len,MPIU_SCALAR,root,PetscObjectComm((PetscObject)ds))); |
| 353 |
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.
|
80 | PetscCall(PetscMPIIntCast(n,&len)); |
| 354 |
15/30✓ 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 taken 4 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
160 | PetscCallMPI(MPI_Bcast(X+ld*j,len,MPIU_SCALAR,root,PetscObjectComm((PetscObject)ds))); |
| 355 | } | ||
| 356 | } | ||
| 357 |
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.
|
20 | PetscCall(PetscLayoutDestroy(&map)); |
| 358 | } | ||
| 359 |
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.
|
133 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_X],&X)); |
| 360 |
6/12✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
27 | PetscFunctionReturn(PETSC_SUCCESS); |
| 361 | } | ||
| 362 | |||
| 363 | 133 | PetscErrorCode DSSolve_NEP_Contour(DS ds,PetscScalar *wr,PetscScalar *wi) | |
| 364 | { | ||
| 365 | 133 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 366 | 133 | PetscScalar *alpha,*beta,*Q,*Z,*X,*U,*V,*W,*work,*Rc,*R,*w,*z,*zn,*S; | |
| 367 | 133 | PetscScalar sone=1.0,szero=0.0,center,a; | |
| 368 | 133 | PetscReal *rwork,norm,radius,vscale,rgscale,*sigma; | |
| 369 | 133 | PetscBLASInt info,n,*perm,p,pp,ld,lwork,k_,rk_,colA,rowA,one=1; | |
| 370 | 133 | PetscInt mid,lds,nnod=ctx->nnod,k,i,ii,jj,j,s,off,rk,nwu=0,nw,lrwork,*inside,kstart=0,kend=nnod; | |
| 371 | 133 | PetscMPIInt len; | |
| 372 | 133 | PetscBool isellipse; | |
| 373 | 133 | PetscRandom rand; | |
| 374 | |||
| 375 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
133 | PetscFunctionBegin; |
| 376 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
133 | PetscCheck(ctx->rg,PetscObjectComm((PetscObject)ds),PETSC_ERR_ORDER,"The contour solver requires a region passed with DSNEPSetRG()"); |
| 377 | /* Contour parameters */ | ||
| 378 |
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.
|
133 | PetscCall(PetscObjectTypeCompare((PetscObject)ctx->rg,RGELLIPSE,&isellipse)); |
| 379 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
133 | PetscCheck(isellipse,PetscObjectComm((PetscObject)ds),PETSC_ERR_SUP,"Region must be Ellipse"); |
| 380 |
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.
|
133 | PetscCall(RGEllipseGetParameters(ctx->rg,¢er,&radius,&vscale)); |
| 381 |
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.
|
133 | PetscCall(RGGetScale(ctx->rg,&rgscale)); |
| 382 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
133 | if (ds->pmode==DS_PARALLEL_DISTRIBUTED) { |
| 383 |
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.
|
20 | if (!ctx->map) PetscCall(PetscLayoutCreateFromSizes(PetscObjectComm((PetscObject)ds),PETSC_DECIDE,ctx->nnod,1,&ctx->map)); |
| 384 |
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.
|
20 | PetscCall(PetscLayoutGetRange(ctx->map,&kstart,&kend)); |
| 385 | } | ||
| 386 | |||
| 387 |
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.
|
133 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_W)); /* size n */ |
| 388 |
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.
|
133 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_Q)); /* size mid*n */ |
| 389 |
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.
|
133 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_Z)); /* size mid*n */ |
| 390 |
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.
|
133 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_U)); /* size mid*n */ |
| 391 |
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.
|
133 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_V)); /* size mid*n */ |
| 392 |
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.
|
133 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 393 |
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.
|
133 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Z],&Z)); |
| 394 |
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.
|
133 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_U],&U)); |
| 395 |
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.
|
133 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_V],&V)); |
| 396 | 133 | mid = ctx->max_mid; | |
| 397 |
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.
|
133 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 398 | 133 | p = n; /* maximum number of columns for the probing matrix */ | |
| 399 |
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.
|
133 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 400 |
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.
|
133 | PetscCall(PetscBLASIntCast(mid*n,&rowA)); |
| 401 | 133 | nw = 2*n*(p+mid)+3*nnod+2*mid*n*p; | |
| 402 | 133 | lrwork = 9*mid*n; | |
| 403 | |||
| 404 | /* workspace query and memory allocation */ | ||
| 405 | 133 | lwork = -1; | |
| 406 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
133 | PetscCallBLAS("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&rowA,Q,&rowA,Z,&rowA,NULL,NULL,NULL,&ld,V,&rowA,&a,&lwork,NULL,&info)); |
| 407 |
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.
|
133 | PetscCall(PetscBLASIntCast((PetscInt)PetscRealPart(a),&lwork)); |
| 408 |
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.
|
133 | PetscCall(DSAllocateWork_Private(ds,lwork+nw,lrwork,n+1)); |
| 409 | |||
| 410 | 133 | sigma = ds->rwork; | |
| 411 | 133 | rwork = ds->rwork+mid*n; | |
| 412 | 133 | perm = ds->iwork; | |
| 413 | 133 | z = ds->work+nwu; nwu += nnod; /* quadrature points */ | |
| 414 | 133 | zn = ds->work+nwu; nwu += nnod; /* normalized quadrature points */ | |
| 415 | 133 | w = ds->work+nwu; nwu += nnod; /* quadrature weights */ | |
| 416 | 133 | Rc = ds->work+nwu; nwu += n*p; | |
| 417 | 133 | R = ds->work+nwu; nwu += n*p; | |
| 418 | 133 | alpha = ds->work+nwu; nwu += mid*n; | |
| 419 | 133 | beta = ds->work+nwu; nwu += mid*n; | |
| 420 | 133 | S = ds->work+nwu; nwu += 2*mid*n*p; | |
| 421 | 133 | work = ds->work+nwu; | |
| 422 | |||
| 423 | /* Compute quadrature parameters */ | ||
| 424 |
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.
|
133 | PetscCall(RGComputeQuadrature(ctx->rg,RG_QUADRULE_TRAPEZOIDAL,nnod,z,zn,w)); |
| 425 | |||
| 426 | /* Set random matrix */ | ||
| 427 |
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.
|
133 | PetscCall(PetscRandomCreate(PetscObjectComm((PetscObject)ds),&rand)); |
| 428 |
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.
|
133 | PetscCall(PetscRandomSetSeed(rand,0x12345678)); |
| 429 |
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.
|
133 | PetscCall(PetscRandomSeed(rand)); |
| 430 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1397 | for (j=0;j<p;j++) |
| 431 |
7/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
|
21978 | for (i=0;i<n;i++) PetscCall(PetscRandomGetValue(rand,Rc+i+j*n)); |
| 432 |
4/6✓ Branch 0 taken 3 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
133 | PetscCall(PetscArrayzero(S,2*mid*n*p)); |
| 433 | /* Loop of integration points */ | ||
| 434 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
7445 | for (k=kstart;k<kend;k++) { |
| 435 |
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.
|
7312 | PetscCall(PetscInfo(NULL,"Solving integration point %" PetscInt_FMT "\n",k)); |
| 436 |
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.
|
7312 | PetscCall(PetscArraycpy(R,Rc,p*n)); |
| 437 |
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.
|
7312 | PetscCall(DSNEPComputeMatrix(ds,z[k],PETSC_FALSE,DS_MAT_W)); |
| 438 | |||
| 439 | /* LU factorization */ | ||
| 440 |
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.
|
7312 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_W],&W)); |
| 441 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
7312 | PetscCallBLAS("LAPACKgetrf",LAPACKgetrf_(&n,&n,W,&ld,perm,&info)); |
| 442 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
7312 | SlepcCheckLapackInfo("getrf",info); |
| 443 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
7312 | PetscCallBLAS("LAPACKgetrs",LAPACKgetrs_("N",&n,&p,W,&ld,perm,R,&n,&info)); |
| 444 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
7312 | SlepcCheckLapackInfo("getrs",info); |
| 445 |
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.
|
7312 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_W],&W)); |
| 446 | |||
| 447 | /* Moments computation */ | ||
| 448 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65328 | for (s=0;s<2*ctx->max_mid;s++) { |
| 449 | 58016 | off = s*n*p; | |
| 450 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
627424 | for (j=0;j<p;j++) |
| 451 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
10558656 | for (i=0;i<n;i++) S[off+i+j*n] += w[k]*R[j*n+i]; |
| 452 | 58016 | w[k] *= zn[k]; | |
| 453 | } | ||
| 454 | } | ||
| 455 | |||
| 456 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
133 | if (ds->pmode==DS_PARALLEL_DISTRIBUTED) { /* compute final S via reduction */ |
| 457 |
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.
|
20 | PetscCall(PetscMPIIntCast(2*mid*n*p,&len)); |
| 458 |
28/58✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 1 times.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 1 times.
✓ Branch 50 taken 1 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
|
20 | PetscCallMPI(MPIU_Allreduce(MPI_IN_PLACE,S,len,MPIU_SCALAR,MPIU_SUM,PetscObjectComm((PetscObject)ds))); |
| 459 | } | ||
| 460 |
7/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
133 | PetscCall(PetscBLASIntCast(ctx->spls?PetscMin(ctx->spls,n):n,&p)); |
| 461 | 133 | pp = p; | |
| 462 | 133 | do { | |
| 463 | 133 | p = pp; | |
| 464 |
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.
|
133 | PetscCall(PetscBLASIntCast(mid*p,&colA)); |
| 465 | |||
| 466 |
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.
|
133 | PetscCall(PetscInfo(ds,"Computing SVD of size %" PetscBLASInt_FMT "x%" PetscBLASInt_FMT "\n",rowA,colA)); |
| 467 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
650 | for (jj=0;jj<mid;jj++) { |
| 468 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2570 | for (ii=0;ii<mid;ii++) { |
| 469 | 2053 | off = jj*p*rowA+ii*n; | |
| 470 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
21527 | for (j=0;j<p;j++) |
| 471 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
343398 | for (i=0;i<n;i++) Q[off+j*rowA+i] = S[((jj+ii)*n+j)*n+i]; |
| 472 | } | ||
| 473 | } | ||
| 474 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
133 | PetscCallBLAS("LAPACKgesvd",LAPACKgesvd_("S","S",&rowA,&colA,Q,&rowA,sigma,U,&rowA,V,&colA,work,&lwork,rwork,&info)); |
| 475 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
133 | SlepcCheckLapackInfo("gesvd",info); |
| 476 | |||
| 477 | 133 | rk = colA; | |
| 478 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
808 | for (i=1;i<colA;i++) if (sigma[i]/sigma[0]<PETSC_MACHINE_EPSILON*1e4) {rk = i; break;} |
| 479 |
3/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
|
133 | if (rk<colA || p==n) break; |
| 480 | ✗ | pp *= 2; | |
| 481 | ✗ | } while (pp<=n); | |
| 482 |
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.
|
133 | PetscCall(PetscInfo(ds,"Solving generalized eigenproblem of size %" PetscInt_FMT "\n",rk)); |
| 483 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
650 | for (jj=0;jj<mid;jj++) { |
| 484 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2570 | for (ii=0;ii<mid;ii++) { |
| 485 | 2053 | off = jj*p*rowA+ii*n; | |
| 486 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
21527 | for (j=0;j<p;j++) |
| 487 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
343398 | for (i=0;i<n;i++) Q[off+j*rowA+i] = S[((jj+ii+1)*n+j)*n+i]; |
| 488 | } | ||
| 489 | } | ||
| 490 |
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.
|
133 | PetscCall(PetscBLASIntCast(rk,&rk_)); |
| 491 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
133 | PetscCallBLAS("BLASgemm",BLASgemm_("N","C",&rowA,&rk_,&colA,&sone,Q,&rowA,V,&colA,&szero,Z,&rowA)); |
| 492 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
133 | PetscCallBLAS("BLASgemm",BLASgemm_("C","N",&rk_,&rk_,&rowA,&sone,U,&rowA,Z,&rowA,&szero,Q,&rk_)); |
| 493 |
4/6✓ Branch 0 taken 3 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
133 | PetscCall(PetscArrayzero(Z,n*mid*n*mid)); |
| 494 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
941 | for (j=0;j<rk;j++) Z[j+j*rk_] = sigma[j]; |
| 495 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
133 | PetscCallBLAS("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&rk_,Q,&rk_,Z,&rk_,alpha,beta,NULL,&ld,V,&rk_,work,&lwork,rwork,&info)); |
| 496 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
133 | SlepcCheckLapackInfo(LAPGEEV,info); |
| 497 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
941 | for (i=0;i<rk;i++) wr[i] = (center+alpha[i]*radius/beta[i])*rgscale; |
| 498 |
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.
|
133 | PetscCall(PetscMalloc1(rk,&inside)); |
| 499 |
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.
|
133 | PetscCall(RGCheckInside(ctx->rg,rk,wr,wi,inside)); |
| 500 | k=0; | ||
| 501 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
941 | for (i=0;i<rk;i++) |
| 502 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
808 | if (inside[i]==1) inside[k++] = i; |
| 503 | /* Discard values outside region */ | ||
| 504 | 133 | lds = ld*mid; | |
| 505 |
4/6✓ Branch 0 taken 3 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
133 | PetscCall(PetscArrayzero(Q,lds*lds)); |
| 506 |
4/6✓ Branch 0 taken 3 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
133 | PetscCall(PetscArrayzero(Z,lds*lds)); |
| 507 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
760 | for (i=0;i<k;i++) Q[i+i*lds] = (center*beta[inside[i]]+radius*alpha[inside[i]])*rgscale; |
| 508 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
760 | for (i=0;i<k;i++) Z[i+i*lds] = beta[inside[i]]; |
| 509 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
760 | for (i=0;i<k;i++) wr[i] = Q[i+i*lds]/Z[i+i*lds]; |
| 510 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
5967 | for (j=0;j<k;j++) for (i=0;i<rk;i++) V[j*rk+i] = sigma[i]*V[inside[j]*rk+i]; |
| 511 |
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.
|
133 | PetscCall(PetscBLASIntCast(k,&k_)); |
| 512 |
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.
|
133 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_X],&X)); |
| 513 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
133 | PetscCallBLAS("BLASgemm",BLASgemm_("N","N",&n,&k_,&rk_,&sone,U,&rowA,V,&rk_,&szero,X,&ld)); |
| 514 | /* Normalize */ | ||
| 515 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
760 | for (j=0;j<k;j++) { |
| 516 | 627 | norm = BLASnrm2_(&n,X+ld*j,&one); | |
| 517 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
7665 | for (i=0;i<n;i++) X[ld*j+i] /= norm; |
| 518 | } | ||
| 519 |
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.
|
133 | PetscCall(PetscFree(inside)); |
| 520 |
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.
|
133 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_X],&X)); |
| 521 |
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.
|
133 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Q],&Q)); |
| 522 |
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.
|
133 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Z],&Z)); |
| 523 |
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.
|
133 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_U],&U)); |
| 524 |
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.
|
133 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_V],&V)); |
| 525 | |||
| 526 | /* Newton refinement */ | ||
| 527 |
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.
|
133 | if (ctx->Nit) PetscCall(DSNEPNewtonRefine(ds,k,wr)); |
| 528 | 133 | ds->t = k; | |
| 529 |
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.
|
133 | PetscCall(PetscRandomDestroy(&rand)); |
| 530 |
6/12✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
27 | PetscFunctionReturn(PETSC_SUCCESS); |
| 531 | } | ||
| 532 | #endif | ||
| 533 | |||
| 534 | #if !defined(PETSC_HAVE_MPIUNI) | ||
| 535 | 360 | static PetscErrorCode DSSynchronize_NEP(DS ds,PetscScalar eigr[],PetscScalar eigi[]) | |
| 536 | { | ||
| 537 | 360 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 538 | 360 | PetscInt ld=ds->ld,k=0; | |
| 539 | 360 | PetscMPIInt n,n2,rank,size,off=0; | |
| 540 | 360 | PetscScalar *X; | |
| 541 | |||
| 542 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
360 | PetscFunctionBegin; |
| 543 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
360 | if (!ds->method) { /* SLP */ |
| 544 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
360 | if (ds->state>=DS_STATE_CONDENSED) k += ds->n; |
| 545 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
360 | if (eigr) k += 1; |
| 546 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
360 | if (eigi) k += 1; |
| 547 |
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.
|
360 | PetscCall(PetscMPIIntCast(1,&n)); |
| 548 |
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.
|
360 | PetscCall(PetscMPIIntCast(ds->n,&n2)); |
| 549 | } else { /* Contour */ | ||
| 550 | ✗ | if (ds->state>=DS_STATE_CONDENSED) k += ctx->max_mid*ds->n*ld; | |
| 551 | ✗ | if (eigr) k += ctx->max_mid*ds->n; | |
| 552 | ✗ | if (eigi) k += ctx->max_mid*ds->n; | |
| 553 | ✗ | PetscCall(PetscMPIIntCast(ctx->max_mid*ds->n,&n)); | |
| 554 | ✗ | PetscCall(PetscMPIIntCast(ctx->max_mid*ds->n*ld,&n2)); | |
| 555 | } | ||
| 556 |
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.
|
360 | PetscCall(DSAllocateWork_Private(ds,k,0,0)); |
| 557 |
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.
|
360 | PetscCall(PetscMPIIntCast(k*sizeof(PetscScalar),&size)); |
| 558 |
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.
|
360 | if (ds->state>=DS_STATE_CONDENSED) PetscCall(MatDenseGetArray(ds->omat[DS_MAT_X],&X)); |
| 559 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
360 | PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)ds),&rank)); |
| 560 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
360 | if (!rank) { |
| 561 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
180 | if (ds->state>=DS_STATE_CONDENSED) PetscCallMPI(MPI_Pack(X,n2,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 562 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
180 | if (eigr) PetscCallMPI(MPI_Pack(eigr,n,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 563 | #if !defined(PETSC_USE_COMPLEX) | ||
| 564 |
1/30✗ Branch 0 not taken.
✓ Branch 1 taken 5 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.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
110 | if (eigi) PetscCallMPI(MPI_Pack(eigi,n,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 565 | #endif | ||
| 566 | } | ||
| 567 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
720 | PetscCallMPI(MPI_Bcast(ds->work,size,MPI_BYTE,0,PetscObjectComm((PetscObject)ds))); |
| 568 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
360 | if (rank) { |
| 569 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
180 | if (ds->state>=DS_STATE_CONDENSED) PetscCallMPI(MPI_Unpack(ds->work,size,&off,X,n2,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 570 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
180 | if (eigr) PetscCallMPI(MPI_Unpack(ds->work,size,&off,eigr,n,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 571 | #if !defined(PETSC_USE_COMPLEX) | ||
| 572 |
1/30✗ Branch 0 not taken.
✓ Branch 1 taken 5 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.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
110 | if (eigi) PetscCallMPI(MPI_Unpack(ds->work,size,&off,eigi,n,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 573 | #endif | ||
| 574 | } | ||
| 575 |
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.
|
360 | if (ds->state>=DS_STATE_CONDENSED) PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_X],&X)); |
| 576 |
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.
|
72 | PetscFunctionReturn(PETSC_SUCCESS); |
| 577 | } | ||
| 578 | #endif | ||
| 579 | |||
| 580 | 297 | static PetscErrorCode DSNEPSetFN_NEP(DS ds,PetscInt n,FN fn[]) | |
| 581 | { | ||
| 582 | 297 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 583 | 297 | PetscInt i; | |
| 584 | |||
| 585 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
297 | PetscFunctionBegin; |
| 586 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
297 | PetscCheck(n>0,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Must have one or more functions, you have %" PetscInt_FMT,n); |
| 587 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
297 | PetscCheck(n<=DS_NUM_EXTRA,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Too many functions, you specified %" PetscInt_FMT " but the limit is %d",n,DS_NUM_EXTRA); |
| 588 |
5/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
297 | if (ds->ld) PetscCall(PetscInfo(ds,"DSNEPSetFN() called after DSAllocate()\n")); |
| 589 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
1173 | for (i=0;i<n;i++) PetscCall(PetscObjectReference((PetscObject)fn[i])); |
| 590 |
7/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 2 times.
|
312 | for (i=0;i<ctx->nf;i++) PetscCall(FNDestroy(&ctx->f[i])); |
| 591 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1173 | for (i=0;i<n;i++) ctx->f[i] = fn[i]; |
| 592 | 297 | ctx->nf = n; | |
| 593 |
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.
|
297 | PetscFunctionReturn(PETSC_SUCCESS); |
| 594 | } | ||
| 595 | |||
| 596 | /*@ | ||
| 597 | DSNEPSetFN - Sets a number of functions that define the nonlinear | ||
| 598 | eigenproblem. | ||
| 599 | |||
| 600 | Collective | ||
| 601 | |||
| 602 | Input Parameters: | ||
| 603 | + ds - the direct solver context | ||
| 604 | . n - number of functions | ||
| 605 | - fn - array of functions | ||
| 606 | |||
| 607 | Notes: | ||
| 608 | The nonlinear eigenproblem is defined in terms of the split nonlinear | ||
| 609 | operator $T(\lambda) = \sum_i E_i f_i(\lambda)$. | ||
| 610 | |||
| 611 | This function must be called before `DSAllocate()`. Then `DSAllocate()` | ||
| 612 | will allocate an extra matrix $E_i$ per each function, that can be | ||
| 613 | filled in the usual way. | ||
| 614 | |||
| 615 | Level: advanced | ||
| 616 | |||
| 617 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetFN()`, `DSAllocate()` | ||
| 618 | @*/ | ||
| 619 | 297 | PetscErrorCode DSNEPSetFN(DS ds,PetscInt n,FN fn[]) | |
| 620 | { | ||
| 621 | 297 | PetscInt i; | |
| 622 | |||
| 623 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
297 | PetscFunctionBegin; |
| 624 |
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.
|
297 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 625 |
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.
|
297 | PetscValidLogicalCollectiveInt(ds,n,2); |
| 626 |
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.
|
297 | PetscAssertPointer(fn,3); |
| 627 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1173 | for (i=0;i<n;i++) { |
| 628 |
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.
|
876 | PetscValidHeaderSpecific(fn[i],FN_CLASSID,3); |
| 629 |
13/32✓ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
876 | PetscCheckSameComm(ds,1,fn[i],3); |
| 630 | } | ||
| 631 |
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.
|
297 | PetscTryMethod(ds,"DSNEPSetFN_C",(DS,PetscInt,FN[]),(ds,n,fn)); |
| 632 |
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.
|
297 | PetscFunctionReturn(PETSC_SUCCESS); |
| 633 | } | ||
| 634 | |||
| 635 | 45 | static PetscErrorCode DSNEPGetFN_NEP(DS ds,PetscInt k,FN *fn) | |
| 636 | { | ||
| 637 | 45 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 638 | |||
| 639 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
45 | PetscFunctionBegin; |
| 640 |
2/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
45 | PetscCheck(k>=0 && k<ctx->nf,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"k must be between 0 and %" PetscInt_FMT,ctx->nf-1); |
| 641 | 45 | *fn = ctx->f[k]; | |
| 642 |
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.
|
45 | PetscFunctionReturn(PETSC_SUCCESS); |
| 643 | } | ||
| 644 | |||
| 645 | /*@ | ||
| 646 | DSNEPGetFN - Gets the functions associated with the nonlinear `DS`. | ||
| 647 | |||
| 648 | Not Collective | ||
| 649 | |||
| 650 | Input Parameters: | ||
| 651 | + ds - the direct solver context | ||
| 652 | - k - the index of the requested function (starting in 0) | ||
| 653 | |||
| 654 | Output Parameter: | ||
| 655 | . fn - the function | ||
| 656 | |||
| 657 | Level: advanced | ||
| 658 | |||
| 659 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetFN()` | ||
| 660 | @*/ | ||
| 661 | 45 | PetscErrorCode DSNEPGetFN(DS ds,PetscInt k,FN *fn) | |
| 662 | { | ||
| 663 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
45 | PetscFunctionBegin; |
| 664 |
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.
|
45 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 665 |
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.
|
45 | PetscAssertPointer(fn,3); |
| 666 |
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.
|
45 | PetscUseMethod(ds,"DSNEPGetFN_C",(DS,PetscInt,FN*),(ds,k,fn)); |
| 667 |
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.
|
45 | PetscFunctionReturn(PETSC_SUCCESS); |
| 668 | } | ||
| 669 | |||
| 670 | 25 | static PetscErrorCode DSNEPGetNumFN_NEP(DS ds,PetscInt *n) | |
| 671 | { | ||
| 672 | 25 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 673 | |||
| 674 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
25 | PetscFunctionBegin; |
| 675 | 25 | *n = ctx->nf; | |
| 676 |
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.
|
25 | PetscFunctionReturn(PETSC_SUCCESS); |
| 677 | } | ||
| 678 | |||
| 679 | /*@ | ||
| 680 | DSNEPGetNumFN - Returns the number of functions stored internally by | ||
| 681 | the `DS`. | ||
| 682 | |||
| 683 | Not Collective | ||
| 684 | |||
| 685 | Input Parameter: | ||
| 686 | . ds - the direct solver context | ||
| 687 | |||
| 688 | Output Parameter: | ||
| 689 | . n - the number of functions passed in `DSNEPSetFN()` | ||
| 690 | |||
| 691 | Level: advanced | ||
| 692 | |||
| 693 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetFN()` | ||
| 694 | @*/ | ||
| 695 | 25 | PetscErrorCode DSNEPGetNumFN(DS ds,PetscInt *n) | |
| 696 | { | ||
| 697 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
25 | PetscFunctionBegin; |
| 698 |
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.
|
25 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 699 |
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.
|
25 | PetscAssertPointer(n,2); |
| 700 |
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.
|
25 | PetscUseMethod(ds,"DSNEPGetNumFN_C",(DS,PetscInt*),(ds,n)); |
| 701 |
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.
|
25 | PetscFunctionReturn(PETSC_SUCCESS); |
| 702 | } | ||
| 703 | |||
| 704 | 10 | static PetscErrorCode DSNEPSetMinimality_NEP(DS ds,PetscInt n) | |
| 705 | { | ||
| 706 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 707 | |||
| 708 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 709 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (n == PETSC_DECIDE || n == PETSC_DEFAULT) ctx->max_mid = 4; |
| 710 | else { | ||
| 711 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10 | PetscCheck(n>0,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"The minimality value must be > 0"); |
| 712 | 10 | ctx->max_mid = n; | |
| 713 | } | ||
| 714 |
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.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
| 715 | } | ||
| 716 | |||
| 717 | /*@ | ||
| 718 | DSNEPSetMinimality - Sets the maximum minimality index used internally by | ||
| 719 | the `DSNEP`. | ||
| 720 | |||
| 721 | Logically Collective | ||
| 722 | |||
| 723 | Input Parameters: | ||
| 724 | + ds - the direct solver context | ||
| 725 | - n - the maximum minimality index | ||
| 726 | |||
| 727 | Options Database Key: | ||
| 728 | . -ds_nep_minimality \<n\> - sets the maximum minimality index | ||
| 729 | |||
| 730 | Notes: | ||
| 731 | The maximum minimality index is used only in the contour integral method, | ||
| 732 | and is related to the highest moments used in the method. The default | ||
| 733 | value is 1, a larger value might give better accuracy in some cases, but | ||
| 734 | at a higher cost. | ||
| 735 | |||
| 736 | Level: advanced | ||
| 737 | |||
| 738 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetMinimality()` | ||
| 739 | @*/ | ||
| 740 | 10 | PetscErrorCode DSNEPSetMinimality(DS ds,PetscInt n) | |
| 741 | { | ||
| 742 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 743 |
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.
|
10 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 744 |
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.
|
10 | PetscValidLogicalCollectiveInt(ds,n,2); |
| 745 |
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.
|
10 | PetscTryMethod(ds,"DSNEPSetMinimality_C",(DS,PetscInt),(ds,n)); |
| 746 |
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); |
| 747 | } | ||
| 748 | |||
| 749 | 864 | static PetscErrorCode DSNEPGetMinimality_NEP(DS ds,PetscInt *n) | |
| 750 | { | ||
| 751 | 864 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 752 | |||
| 753 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
864 | PetscFunctionBegin; |
| 754 | 864 | *n = ctx->max_mid; | |
| 755 |
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.
|
864 | PetscFunctionReturn(PETSC_SUCCESS); |
| 756 | } | ||
| 757 | |||
| 758 | /*@ | ||
| 759 | DSNEPGetMinimality - Returns the maximum minimality index used internally by | ||
| 760 | the `DSNEP`. | ||
| 761 | |||
| 762 | Not Collective | ||
| 763 | |||
| 764 | Input Parameter: | ||
| 765 | . ds - the direct solver context | ||
| 766 | |||
| 767 | Output Parameter: | ||
| 768 | . n - the maximum minimality index passed in `DSNEPSetMinimality()` | ||
| 769 | |||
| 770 | Level: advanced | ||
| 771 | |||
| 772 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetMinimality()` | ||
| 773 | @*/ | ||
| 774 | 864 | PetscErrorCode DSNEPGetMinimality(DS ds,PetscInt *n) | |
| 775 | { | ||
| 776 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
864 | PetscFunctionBegin; |
| 777 |
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.
|
864 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 778 |
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.
|
864 | PetscAssertPointer(n,2); |
| 779 |
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.
|
864 | PetscUseMethod(ds,"DSNEPGetMinimality_C",(DS,PetscInt*),(ds,n)); |
| 780 |
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.
|
864 | PetscFunctionReturn(PETSC_SUCCESS); |
| 781 | } | ||
| 782 | |||
| 783 | 35 | static PetscErrorCode DSNEPSetRefine_NEP(DS ds,PetscReal tol,PetscInt its) | |
| 784 | { | ||
| 785 | 35 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 786 | |||
| 787 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
35 | PetscFunctionBegin; |
| 788 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
35 | if (tol == (PetscReal)PETSC_DETERMINE) { |
| 789 | ✗ | ctx->rtol = PETSC_MACHINE_EPSILON/PetscSqrtReal(PETSC_SQRT_MACHINE_EPSILON); | |
| 790 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
35 | } else if (tol != (PetscReal)PETSC_CURRENT) { |
| 791 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
25 | PetscCheck(tol>0.0,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"The tolerance must be > 0"); |
| 792 | 25 | ctx->rtol = tol; | |
| 793 | } | ||
| 794 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
35 | if (its == PETSC_DETERMINE) { |
| 795 | 20 | ctx->Nit = 3; | |
| 796 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
15 | } else if (its != PETSC_CURRENT) { |
| 797 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15 | PetscCheck(its>=0,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"The number of iterations must be >= 0"); |
| 798 | 15 | ctx->Nit = its; | |
| 799 | } | ||
| 800 |
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.
|
7 | PetscFunctionReturn(PETSC_SUCCESS); |
| 801 | } | ||
| 802 | |||
| 803 | /*@ | ||
| 804 | DSNEPSetRefine - Sets the tolerance and the number of iterations of Newton iterative | ||
| 805 | refinement for eigenpairs when solving a `DSNEP`. | ||
| 806 | |||
| 807 | Logically Collective | ||
| 808 | |||
| 809 | Input Parameters: | ||
| 810 | + ds - the direct solver context | ||
| 811 | . tol - the tolerance | ||
| 812 | - its - the number of iterations | ||
| 813 | |||
| 814 | Options Database Keys: | ||
| 815 | + -ds_nep_refine_tol \<tol\> - sets the tolerance | ||
| 816 | - -ds_nep_refine_its \<its\> - sets the number of Newton iterations | ||
| 817 | |||
| 818 | Notes: | ||
| 819 | Iterative refinement of eigenpairs is currently used only in the contour | ||
| 820 | integral method. | ||
| 821 | |||
| 822 | Use `PETSC_CURRENT` to retain the current value of any of the parameters. | ||
| 823 | Use `PETSC_DETERMINE` for either argument to assign a default value computed | ||
| 824 | internally. | ||
| 825 | |||
| 826 | Level: advanced | ||
| 827 | |||
| 828 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetRefine()` | ||
| 829 | @*/ | ||
| 830 | 35 | PetscErrorCode DSNEPSetRefine(DS ds,PetscReal tol,PetscInt its) | |
| 831 | { | ||
| 832 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
35 | PetscFunctionBegin; |
| 833 |
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.
|
35 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 834 |
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.
|
35 | PetscValidLogicalCollectiveReal(ds,tol,2); |
| 835 |
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.
|
35 | PetscValidLogicalCollectiveInt(ds,its,3); |
| 836 |
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.
|
35 | PetscTryMethod(ds,"DSNEPSetRefine_C",(DS,PetscReal,PetscInt),(ds,tol,its)); |
| 837 |
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.
|
35 | PetscFunctionReturn(PETSC_SUCCESS); |
| 838 | } | ||
| 839 | |||
| 840 | 10 | static PetscErrorCode DSNEPGetRefine_NEP(DS ds,PetscReal *tol,PetscInt *its) | |
| 841 | { | ||
| 842 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 843 | |||
| 844 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 845 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (tol) *tol = ctx->rtol; |
| 846 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (its) *its = ctx->Nit; |
| 847 |
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); |
| 848 | } | ||
| 849 | |||
| 850 | /*@ | ||
| 851 | DSNEPGetRefine - Returns the tolerance and the number of iterations of Newton iterative | ||
| 852 | refinement for eigenpairs. | ||
| 853 | |||
| 854 | Not Collective | ||
| 855 | |||
| 856 | Input Parameter: | ||
| 857 | . ds - the direct solver context | ||
| 858 | |||
| 859 | Output Parameters: | ||
| 860 | + tol - the tolerance | ||
| 861 | - its - the number of iterations | ||
| 862 | |||
| 863 | Level: advanced | ||
| 864 | |||
| 865 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetRefine()` | ||
| 866 | @*/ | ||
| 867 | 10 | PetscErrorCode DSNEPGetRefine(DS ds,PetscReal *tol,PetscInt *its) | |
| 868 | { | ||
| 869 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 870 |
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.
|
10 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 871 |
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.
|
10 | PetscUseMethod(ds,"DSNEPGetRefine_C",(DS,PetscReal*,PetscInt*),(ds,tol,its)); |
| 872 |
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); |
| 873 | } | ||
| 874 | |||
| 875 | 10 | static PetscErrorCode DSNEPSetIntegrationPoints_NEP(DS ds,PetscInt ip) | |
| 876 | { | ||
| 877 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 878 | |||
| 879 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 880 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (ip == PETSC_DECIDE || ip == PETSC_DEFAULT) ctx->nnod = 64; |
| 881 | else { | ||
| 882 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10 | PetscCheck(ip>0,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"The number of integration points must be > 0"); |
| 883 | 10 | ctx->nnod = ip; | |
| 884 | } | ||
| 885 |
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(PetscLayoutDestroy(&ctx->map)); /* need to redistribute at next solve */ |
| 886 |
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.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
| 887 | } | ||
| 888 | |||
| 889 | /*@ | ||
| 890 | DSNEPSetIntegrationPoints - Sets the number of integration points to be | ||
| 891 | used in the contour integral method when solving a `DSNEP`. | ||
| 892 | |||
| 893 | Logically Collective | ||
| 894 | |||
| 895 | Input Parameters: | ||
| 896 | + ds - the direct solver context | ||
| 897 | - ip - the number of integration points | ||
| 898 | |||
| 899 | Options Database Key: | ||
| 900 | . -ds_nep_integration_points \<ip\> - sets the number of integration points | ||
| 901 | |||
| 902 | Notes: | ||
| 903 | This parameter is relevant only in the contour integral method. | ||
| 904 | |||
| 905 | Level: advanced | ||
| 906 | |||
| 907 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetIntegrationPoints()` | ||
| 908 | @*/ | ||
| 909 | 10 | PetscErrorCode DSNEPSetIntegrationPoints(DS ds,PetscInt ip) | |
| 910 | { | ||
| 911 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 912 |
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.
|
10 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 913 |
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.
|
10 | PetscValidLogicalCollectiveInt(ds,ip,2); |
| 914 |
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.
|
10 | PetscTryMethod(ds,"DSNEPSetIntegrationPoints_C",(DS,PetscInt),(ds,ip)); |
| 915 |
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); |
| 916 | } | ||
| 917 | |||
| 918 | 10 | static PetscErrorCode DSNEPGetIntegrationPoints_NEP(DS ds,PetscInt *ip) | |
| 919 | { | ||
| 920 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 921 | |||
| 922 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 923 | 10 | *ip = ctx->nnod; | |
| 924 |
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); |
| 925 | } | ||
| 926 | |||
| 927 | /*@ | ||
| 928 | DSNEPGetIntegrationPoints - Returns the number of integration points used | ||
| 929 | in the contour integral method. | ||
| 930 | |||
| 931 | Not Collective | ||
| 932 | |||
| 933 | Input Parameter: | ||
| 934 | . ds - the direct solver context | ||
| 935 | |||
| 936 | Output Parameter: | ||
| 937 | . ip - the number of integration points | ||
| 938 | |||
| 939 | Level: advanced | ||
| 940 | |||
| 941 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetIntegrationPoints()` | ||
| 942 | @*/ | ||
| 943 | 10 | PetscErrorCode DSNEPGetIntegrationPoints(DS ds,PetscInt *ip) | |
| 944 | { | ||
| 945 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 946 |
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.
|
10 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 947 |
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.
|
10 | PetscAssertPointer(ip,2); |
| 948 |
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.
|
10 | PetscUseMethod(ds,"DSNEPGetIntegrationPoints_C",(DS,PetscInt*),(ds,ip)); |
| 949 |
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); |
| 950 | } | ||
| 951 | |||
| 952 | 10 | static PetscErrorCode DSNEPSetSamplingSize_NEP(DS ds,PetscInt p) | |
| 953 | { | ||
| 954 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 955 | |||
| 956 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 957 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (p == PETSC_DECIDE || p == PETSC_DEFAULT) ctx->spls = 0; |
| 958 | else { | ||
| 959 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10 | PetscCheck(p>0,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"The sample size must be > 0"); |
| 960 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10 | PetscCheck(p>=20,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"The sample size cannot be smaller than 20"); |
| 961 | 10 | ctx->spls = p; | |
| 962 | } | ||
| 963 |
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.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
| 964 | } | ||
| 965 | |||
| 966 | /*@ | ||
| 967 | DSNEPSetSamplingSize - Sets the number of sampling columns to be | ||
| 968 | used in the contour integral method when solving a `DSNEP`. | ||
| 969 | |||
| 970 | Logically Collective | ||
| 971 | |||
| 972 | Input Parameters: | ||
| 973 | + ds - the direct solver context | ||
| 974 | - p - the number of columns for the sampling matrix | ||
| 975 | |||
| 976 | Options Database Key: | ||
| 977 | . -ds_nep_sampling_size \<p\> - the number of sampling columns | ||
| 978 | |||
| 979 | Note: | ||
| 980 | This parameter is relevant only in the contour integral method. | ||
| 981 | |||
| 982 | Level: advanced | ||
| 983 | |||
| 984 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetSamplingSize()` | ||
| 985 | @*/ | ||
| 986 | 10 | PetscErrorCode DSNEPSetSamplingSize(DS ds,PetscInt p) | |
| 987 | { | ||
| 988 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 989 |
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.
|
10 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 990 |
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.
|
10 | PetscValidLogicalCollectiveInt(ds,p,2); |
| 991 |
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.
|
10 | PetscTryMethod(ds,"DSNEPSetSamplingSize_C",(DS,PetscInt),(ds,p)); |
| 992 |
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); |
| 993 | } | ||
| 994 | |||
| 995 | 10 | static PetscErrorCode DSNEPGetSamplingSize_NEP(DS ds,PetscInt *p) | |
| 996 | { | ||
| 997 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 998 | |||
| 999 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 1000 | 10 | *p = ctx->spls; | |
| 1001 |
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); |
| 1002 | } | ||
| 1003 | |||
| 1004 | /*@ | ||
| 1005 | DSNEPGetSamplingSize - Returns the number of sampling columns used | ||
| 1006 | in the contour integral method. | ||
| 1007 | |||
| 1008 | Not Collective | ||
| 1009 | |||
| 1010 | Input Parameter: | ||
| 1011 | . ds - the direct solver context | ||
| 1012 | |||
| 1013 | Output Parameter: | ||
| 1014 | . p - the number of columns for the sampling matrix | ||
| 1015 | |||
| 1016 | Level: advanced | ||
| 1017 | |||
| 1018 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetSamplingSize()` | ||
| 1019 | @*/ | ||
| 1020 | 10 | PetscErrorCode DSNEPGetSamplingSize(DS ds,PetscInt *p) | |
| 1021 | { | ||
| 1022 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 1023 |
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.
|
10 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 1024 |
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.
|
10 | PetscAssertPointer(p,2); |
| 1025 |
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.
|
10 | PetscUseMethod(ds,"DSNEPGetSamplingSize_C",(DS,PetscInt*),(ds,p)); |
| 1026 |
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); |
| 1027 | } | ||
| 1028 | |||
| 1029 | 200 | static PetscErrorCode DSNEPSetComputeMatrixFunction_NEP(DS ds,DSNEPMatrixFunctionFn *fun,void *ctx) | |
| 1030 | { | ||
| 1031 | 200 | DS_NEP *dsctx = (DS_NEP*)ds->data; | |
| 1032 | |||
| 1033 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
200 | PetscFunctionBegin; |
| 1034 | 200 | dsctx->computematrix = fun; | |
| 1035 | 200 | dsctx->computematrixctx = ctx; | |
| 1036 |
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.
|
200 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1037 | } | ||
| 1038 | |||
| 1039 | /*@C | ||
| 1040 | DSNEPSetComputeMatrixFunction - Sets a user-provided subroutine to compute | ||
| 1041 | the matrices $T(\lambda)$ or $T'(\lambda)$. | ||
| 1042 | |||
| 1043 | Logically Collective | ||
| 1044 | |||
| 1045 | Input Parameters: | ||
| 1046 | + ds - the direct solver context | ||
| 1047 | . fun - matrix function evaluation routine, see `DSNEPMatrixFunctionFn` for the calling sequence | ||
| 1048 | - ctx - a context pointer (the last parameter to the user function) | ||
| 1049 | |||
| 1050 | Note: | ||
| 1051 | The result is computed as $T(\lambda) = \sum_i E_i f_i(\lambda)$, and similarly | ||
| 1052 | for the derivative, where $E_i$ are the extra matrices, see `DSMatType`. | ||
| 1053 | |||
| 1054 | Level: developer | ||
| 1055 | |||
| 1056 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetComputeMatrixFunction()` | ||
| 1057 | @*/ | ||
| 1058 | 200 | PetscErrorCode DSNEPSetComputeMatrixFunction(DS ds,DSNEPMatrixFunctionFn *fun,void *ctx) | |
| 1059 | { | ||
| 1060 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
200 | PetscFunctionBegin; |
| 1061 |
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.
|
200 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 1062 |
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.
|
200 | PetscTryMethod(ds,"DSNEPSetComputeMatrixFunction_C",(DS,DSNEPMatrixFunctionFn*,void*),(ds,fun,ctx)); |
| 1063 |
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.
|
200 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1064 | } | ||
| 1065 | |||
| 1066 | ✗ | static PetscErrorCode DSNEPGetComputeMatrixFunction_NEP(DS ds,DSNEPMatrixFunctionFn **fun,void *ctx) | |
| 1067 | { | ||
| 1068 | ✗ | DS_NEP *dsctx = (DS_NEP*)ds->data; | |
| 1069 | |||
| 1070 | ✗ | PetscFunctionBegin; | |
| 1071 | ✗ | if (fun) *fun = dsctx->computematrix; | |
| 1072 | ✗ | if (ctx) *(void**)ctx = dsctx->computematrixctx; | |
| 1073 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 1074 | } | ||
| 1075 | |||
| 1076 | /*@C | ||
| 1077 | DSNEPGetComputeMatrixFunction - Returns the user-provided callback function | ||
| 1078 | set in `DSNEPSetComputeMatrixFunction()`. | ||
| 1079 | |||
| 1080 | Not Collective | ||
| 1081 | |||
| 1082 | Input Parameter: | ||
| 1083 | . ds - the direct solver context | ||
| 1084 | |||
| 1085 | Output Parameters: | ||
| 1086 | + fun - the pointer to the user function | ||
| 1087 | - ctx - the context pointer | ||
| 1088 | |||
| 1089 | Level: developer | ||
| 1090 | |||
| 1091 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetComputeMatrixFunction()` | ||
| 1092 | @*/ | ||
| 1093 | ✗ | PetscErrorCode DSNEPGetComputeMatrixFunction(DS ds,DSNEPMatrixFunctionFn **fun,void *ctx) | |
| 1094 | { | ||
| 1095 | ✗ | PetscFunctionBegin; | |
| 1096 | ✗ | PetscValidHeaderSpecific(ds,DS_CLASSID,1); | |
| 1097 | ✗ | PetscUseMethod(ds,"DSNEPGetComputeMatrixFunction_C",(DS,DSNEPMatrixFunctionFn**,void*),(ds,fun,ctx)); | |
| 1098 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 1099 | } | ||
| 1100 | |||
| 1101 | 137 | static PetscErrorCode DSNEPSetRG_NEP(DS ds,RG rg) | |
| 1102 | { | ||
| 1103 | 137 | DS_NEP *dsctx = (DS_NEP*)ds->data; | |
| 1104 | |||
| 1105 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
137 | PetscFunctionBegin; |
| 1106 |
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.
|
137 | PetscCall(PetscObjectReference((PetscObject)rg)); |
| 1107 |
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.
|
137 | PetscCall(RGDestroy(&dsctx->rg)); |
| 1108 | 137 | dsctx->rg = rg; | |
| 1109 |
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.
|
137 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1110 | } | ||
| 1111 | |||
| 1112 | /*@ | ||
| 1113 | DSNEPSetRG - Associates a region object to the `DSNEP` solver. | ||
| 1114 | |||
| 1115 | Collective | ||
| 1116 | |||
| 1117 | Input Parameters: | ||
| 1118 | + ds - the direct solver context | ||
| 1119 | - rg - the region context | ||
| 1120 | |||
| 1121 | Notes: | ||
| 1122 | The region is used only in the contour integral method, and | ||
| 1123 | should enclose the wanted eigenvalues. | ||
| 1124 | |||
| 1125 | Level: developer | ||
| 1126 | |||
| 1127 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetRG()` | ||
| 1128 | @*/ | ||
| 1129 | 137 | PetscErrorCode DSNEPSetRG(DS ds,RG rg) | |
| 1130 | { | ||
| 1131 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
137 | PetscFunctionBegin; |
| 1132 |
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.
|
137 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 1133 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
137 | if (rg) { |
| 1134 |
2/12✗ 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 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
137 | PetscValidHeaderSpecific(rg,RG_CLASSID,2); |
| 1135 |
13/32✓ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
137 | PetscCheckSameComm(ds,1,rg,2); |
| 1136 | } | ||
| 1137 |
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.
|
137 | PetscTryMethod(ds,"DSNEPSetRG_C",(DS,RG),(ds,rg)); |
| 1138 |
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.
|
137 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1139 | } | ||
| 1140 | |||
| 1141 | 20 | static PetscErrorCode DSNEPGetRG_NEP(DS ds,RG *rg) | |
| 1142 | { | ||
| 1143 | 20 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 1144 | |||
| 1145 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 1146 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (!ctx->rg) { |
| 1147 |
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(RGCreate(PetscObjectComm((PetscObject)ds),&ctx->rg)); |
| 1148 |
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(PetscObjectIncrementTabLevel((PetscObject)ctx->rg,(PetscObject)ds,1)); |
| 1149 |
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(RGSetOptionsPrefix(ctx->rg,((PetscObject)ds)->prefix)); |
| 1150 |
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(RGAppendOptionsPrefix(ctx->rg,"ds_nep_")); |
| 1151 |
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(PetscObjectSetOptions((PetscObject)ctx->rg,((PetscObject)ds)->options)); |
| 1152 | } | ||
| 1153 | 20 | *rg = ctx->rg; | |
| 1154 |
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); |
| 1155 | } | ||
| 1156 | |||
| 1157 | /*@ | ||
| 1158 | DSNEPGetRG - Obtain the region object associated to the `DSNEP` solver. | ||
| 1159 | |||
| 1160 | Collective | ||
| 1161 | |||
| 1162 | Input Parameter: | ||
| 1163 | . ds - the direct solver context | ||
| 1164 | |||
| 1165 | Output Parameter: | ||
| 1166 | . rg - the region context | ||
| 1167 | |||
| 1168 | Level: developer | ||
| 1169 | |||
| 1170 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetRG()` | ||
| 1171 | @*/ | ||
| 1172 | 20 | PetscErrorCode DSNEPGetRG(DS ds,RG *rg) | |
| 1173 | { | ||
| 1174 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 1175 |
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(ds,DS_CLASSID,1); |
| 1176 |
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.
|
20 | PetscAssertPointer(rg,2); |
| 1177 |
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(ds,"DSNEPGetRG_C",(DS,RG*),(ds,rg)); |
| 1178 |
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); |
| 1179 | } | ||
| 1180 | |||
| 1181 | 307 | static PetscErrorCode DSSetFromOptions_NEP(DS ds,PetscOptionItems PetscOptionsObject) | |
| 1182 | { | ||
| 1183 | 307 | PetscInt k; | |
| 1184 | 307 | PetscBool flg; | |
| 1185 | #if defined(PETSC_USE_COMPLEX) | ||
| 1186 | 212 | PetscReal r; | |
| 1187 | 212 | PetscBool flg1; | |
| 1188 | 212 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 1189 | #endif | ||
| 1190 | |||
| 1191 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
307 | PetscFunctionBegin; |
| 1192 |
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.
|
307 | PetscOptionsHeadBegin(PetscOptionsObject,"DS NEP Options"); |
| 1193 | |||
| 1194 |
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.
|
307 | PetscCall(PetscOptionsInt("-ds_nep_minimality","Maximum minimality index","DSNEPSetMinimality",4,&k,&flg)); |
| 1195 |
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.
|
307 | if (flg) PetscCall(DSNEPSetMinimality(ds,k)); |
| 1196 | |||
| 1197 |
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.
|
307 | PetscCall(PetscOptionsInt("-ds_nep_integration_points","Number of integration points","DSNEPSetIntegrationPoints",64,&k,&flg)); |
| 1198 |
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.
|
307 | if (flg) PetscCall(DSNEPSetIntegrationPoints(ds,k)); |
| 1199 | |||
| 1200 |
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.
|
307 | PetscCall(PetscOptionsInt("-ds_nep_sampling_size","Number of sampling columns","DSNEPSetSamplingSize",0,&k,&flg)); |
| 1201 |
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.
|
307 | if (flg) PetscCall(DSNEPSetSamplingSize(ds,k)); |
| 1202 | |||
| 1203 | #if defined(PETSC_USE_COMPLEX) | ||
| 1204 | 212 | r = ctx->rtol; | |
| 1205 |
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.
|
212 | PetscCall(PetscOptionsReal("-ds_nep_refine_tol","Refinement tolerance","DSNEPSetRefine",ctx->rtol,&r,&flg1)); |
| 1206 | 212 | k = ctx->Nit; | |
| 1207 |
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.
|
212 | PetscCall(PetscOptionsInt("-ds_nep_refine_its","Number of iterative refinement iterations","DSNEPSetRefine",ctx->Nit,&k,&flg)); |
| 1208 |
7/10✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 4 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
212 | if (flg1||flg) PetscCall(DSNEPSetRefine(ds,r,k)); |
| 1209 | |||
| 1210 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
212 | if (ds->method==1) { |
| 1211 |
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.
|
15 | if (!ctx->rg) PetscCall(DSNEPGetRG(ds,&ctx->rg)); |
| 1212 |
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.
|
15 | PetscCall(RGSetFromOptions(ctx->rg)); |
| 1213 | } | ||
| 1214 | #endif | ||
| 1215 | |||
| 1216 |
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.
|
307 | PetscOptionsHeadEnd(); |
| 1217 |
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.
|
62 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1218 | } | ||
| 1219 | |||
| 1220 | 317 | static PetscErrorCode DSDestroy_NEP(DS ds) | |
| 1221 | { | ||
| 1222 | 317 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 1223 | 317 | PetscInt i; | |
| 1224 | |||
| 1225 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
317 | PetscFunctionBegin; |
| 1226 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
1178 | for (i=0;i<ctx->nf;i++) PetscCall(FNDestroy(&ctx->f[i])); |
| 1227 |
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.
|
317 | PetscCall(RGDestroy(&ctx->rg)); |
| 1228 |
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.
|
317 | PetscCall(PetscLayoutDestroy(&ctx->map)); |
| 1229 |
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.
|
317 | PetscCall(PetscFree(ds->data)); |
| 1230 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetFN_C",NULL)); |
| 1231 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetFN_C",NULL)); |
| 1232 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetNumFN_C",NULL)); |
| 1233 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetMinimality_C",NULL)); |
| 1234 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetMinimality_C",NULL)); |
| 1235 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetRefine_C",NULL)); |
| 1236 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetRefine_C",NULL)); |
| 1237 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetIntegrationPoints_C",NULL)); |
| 1238 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetIntegrationPoints_C",NULL)); |
| 1239 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetSamplingSize_C",NULL)); |
| 1240 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetSamplingSize_C",NULL)); |
| 1241 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetRG_C",NULL)); |
| 1242 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetRG_C",NULL)); |
| 1243 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetComputeMatrixFunction_C",NULL)); |
| 1244 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetComputeMatrixFunction_C",NULL)); |
| 1245 |
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.
|
64 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1246 | } | ||
| 1247 | |||
| 1248 | 43911 | static PetscErrorCode DSMatGetSize_NEP(DS ds,DSMatType t,PetscInt *rows,PetscInt *cols) | |
| 1249 | { | ||
| 1250 | 43911 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 1251 | |||
| 1252 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
43911 | PetscFunctionBegin; |
| 1253 | 43911 | *rows = ds->n; | |
| 1254 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
43911 | if (t==DS_MAT_Q || t==DS_MAT_Z || t==DS_MAT_U || t==DS_MAT_V) *rows *= ctx->max_mid; |
| 1255 | 43911 | *cols = ds->n; | |
| 1256 |
4/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
|
43911 | if (t==DS_MAT_Q || t==DS_MAT_Z || t==DS_MAT_U || t==DS_MAT_V || t==DS_MAT_X || t==DS_MAT_Y) *cols *= ctx->max_mid; |
| 1257 |
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.
|
43911 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1258 | } | ||
| 1259 | |||
| 1260 | /*MC | ||
| 1261 | DSNEP - Dense Nonlinear Eigenvalue Problem. | ||
| 1262 | |||
| 1263 | Notes: | ||
| 1264 | The problem is expressed as $T(\lambda)x = 0$, where $T(\lambda)$ is a | ||
| 1265 | parameter-dependent matrix written as $T(\lambda) = \sum_i E_i f_i(\lambda)$. | ||
| 1266 | The eigenvalues $\lambda$ are the arguments returned by `DSSolve()`. | ||
| 1267 | |||
| 1268 | The coefficient matrices $E_i$ are the extra matrices of the `DS`, and | ||
| 1269 | the scalar functions $f_i$ are passed via `DSNEPSetFN()`. Optionally, a | ||
| 1270 | callback function to fill the $E_i$ matrices can be set with | ||
| 1271 | `DSNEPSetComputeMatrixFunction()`. | ||
| 1272 | |||
| 1273 | Used DS matrices: | ||
| 1274 | + `DS_MAT_E0` to `DS_MAT_E9` - coefficient matrices of the split form of $T(\lambda)$ | ||
| 1275 | . `DS_MAT_X` - eigenvectors | ||
| 1276 | . `DS_MAT_A` - (workspace) $T(\lambda)$ evaluated at a given $\lambda$ (SLP only) | ||
| 1277 | . `DS_MAT_B` - (workspace) $T'(\lambda)$ evaluated at a given $\lambda$ (SLP only) | ||
| 1278 | . `DS_MAT_Q` - (workspace) left Hankel matrix (contour only) | ||
| 1279 | . `DS_MAT_Z` - (workspace) right Hankel matrix (contour only) | ||
| 1280 | . `DS_MAT_U` - (workspace) left singular vectors (contour only) | ||
| 1281 | . `DS_MAT_V` - (workspace) right singular vectors (contour only) | ||
| 1282 | - `DS_MAT_W` - (workspace) auxiliary matrix of size $n\times n$ | ||
| 1283 | |||
| 1284 | Implemented methods: | ||
| 1285 | + 0 - Successive Linear Problems (SLP), computes just one eigenpair | ||
| 1286 | - 1 - Contour integral, computes all eigenvalues inside a region | ||
| 1287 | |||
| 1288 | Level: beginner | ||
| 1289 | |||
| 1290 | .seealso: [](sec:ds), `DSCreate()`, `DSSetType()`, `DSType`, `DSNEPSetFN()`, `DSNEPSetComputeMatrixFunction()` | ||
| 1291 | M*/ | ||
| 1292 | 317 | SLEPC_EXTERN PetscErrorCode DSCreate_NEP(DS ds) | |
| 1293 | { | ||
| 1294 | 317 | DS_NEP *ctx; | |
| 1295 | |||
| 1296 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
317 | PetscFunctionBegin; |
| 1297 |
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.
|
317 | PetscCall(PetscNew(&ctx)); |
| 1298 | 317 | ds->data = (void*)ctx; | |
| 1299 | 317 | ctx->max_mid = 4; | |
| 1300 | 317 | ctx->nnod = 64; | |
| 1301 | 317 | ctx->Nit = 3; | |
| 1302 | 317 | ctx->rtol = PETSC_MACHINE_EPSILON/PetscSqrtReal(PETSC_SQRT_MACHINE_EPSILON); | |
| 1303 | |||
| 1304 | 317 | ds->ops->allocate = DSAllocate_NEP; | |
| 1305 | 317 | ds->ops->setfromoptions = DSSetFromOptions_NEP; | |
| 1306 | 317 | ds->ops->view = DSView_NEP; | |
| 1307 | 317 | ds->ops->vectors = DSVectors_NEP; | |
| 1308 | 317 | ds->ops->solve[0] = DSSolve_NEP_SLP; | |
| 1309 | #if defined(PETSC_USE_COMPLEX) | ||
| 1310 | 217 | ds->ops->solve[1] = DSSolve_NEP_Contour; | |
| 1311 | #endif | ||
| 1312 | 317 | ds->ops->sort = DSSort_NEP; | |
| 1313 | #if !defined(PETSC_HAVE_MPIUNI) | ||
| 1314 | 317 | ds->ops->synchronize = DSSynchronize_NEP; | |
| 1315 | #endif | ||
| 1316 | 317 | ds->ops->destroy = DSDestroy_NEP; | |
| 1317 | 317 | ds->ops->matgetsize = DSMatGetSize_NEP; | |
| 1318 | |||
| 1319 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetFN_C",DSNEPSetFN_NEP)); |
| 1320 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetFN_C",DSNEPGetFN_NEP)); |
| 1321 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetNumFN_C",DSNEPGetNumFN_NEP)); |
| 1322 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetMinimality_C",DSNEPGetMinimality_NEP)); |
| 1323 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetMinimality_C",DSNEPSetMinimality_NEP)); |
| 1324 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetRefine_C",DSNEPGetRefine_NEP)); |
| 1325 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetRefine_C",DSNEPSetRefine_NEP)); |
| 1326 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetIntegrationPoints_C",DSNEPGetIntegrationPoints_NEP)); |
| 1327 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetIntegrationPoints_C",DSNEPSetIntegrationPoints_NEP)); |
| 1328 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetSamplingSize_C",DSNEPGetSamplingSize_NEP)); |
| 1329 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetSamplingSize_C",DSNEPSetSamplingSize_NEP)); |
| 1330 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetRG_C",DSNEPSetRG_NEP)); |
| 1331 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetRG_C",DSNEPGetRG_NEP)); |
| 1332 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPSetComputeMatrixFunction_C",DSNEPSetComputeMatrixFunction_NEP)); |
| 1333 |
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.
|
317 | PetscCall(PetscObjectComposeFunction((PetscObject)ds,"DSNEPGetComputeMatrixFunction_C",DSNEPGetComputeMatrixFunction_NEP)); |
| 1334 |
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.
|
64 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1335 | } | ||
| 1336 |