| 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 | DSNEPMatrixFunctionFn *computematrix; /* user-provided compute matrix function */ | ||
| 25 | void *computematrixctx; /* context for the compute matrix function */ | ||
| 26 | PetscCtxDestroyFn *computematrixdestroy; /* context destroy function */ | ||
| 27 | } DS_NEP; | ||
| 28 | |||
| 29 | /* | ||
| 30 | DSNEPComputeMatrix - Build the matrix associated with a nonlinear operator | ||
| 31 | T(lambda) or its derivative T'(lambda), given the parameter lambda, where | ||
| 32 | T(lambda) = sum_i E_i*f_i(lambda). The result is written in mat. | ||
| 33 | */ | ||
| 34 | 17215 | static PetscErrorCode DSNEPComputeMatrix(DS ds,PetscScalar lambda,PetscBool deriv,DSMatType mat) | |
| 35 | { | ||
| 36 | 17215 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 37 | 17215 | PetscScalar *T,alpha; | |
| 38 | 17215 | const PetscScalar *E; | |
| 39 | 17215 | PetscInt i,ld,n; | |
| 40 | 17215 | PetscBLASInt k,inc=1; | |
| 41 | |||
| 42 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
17215 | PetscFunctionBegin; |
| 43 |
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)); |
| 44 |
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)); |
| 45 | else { | ||
| 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(DSGetDimensions(ds,&n,NULL,NULL,NULL)); |
| 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(DSGetLeadingDimension(ds,&ld)); |
| 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(PetscBLASIntCast(ld*n,&k)); |
| 49 |
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)); |
| 50 |
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)); |
| 51 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
25034 | for (i=0;i<ctx->nf;i++) { |
| 52 |
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)); |
| 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.
|
18337 | else PetscCall(FNEvaluateFunction(ctx->f[i],lambda,&alpha)); |
| 54 |
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)); |
| 55 |
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)); |
| 56 |
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)); |
| 57 | } | ||
| 58 |
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)); |
| 59 | } | ||
| 60 |
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)); |
| 61 |
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); |
| 62 | } | ||
| 63 | |||
| 64 | 317 | static PetscErrorCode DSAllocate_NEP(DS ds,PetscInt ld) | |
| 65 | { | ||
| 66 | 317 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 67 | 317 | PetscInt i; | |
| 68 | |||
| 69 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
317 | PetscFunctionBegin; |
| 70 |
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)); |
| 71 |
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])); |
| 72 |
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)); |
| 73 |
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)); |
| 74 |
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); |
| 75 | } | ||
| 76 | |||
| 77 | 20 | static PetscErrorCode DSView_NEP(DS ds,PetscViewer viewer) | |
| 78 | { | ||
| 79 | 20 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 80 | 20 | PetscViewerFormat format; | |
| 81 | 20 | PetscInt i; | |
| 82 | 20 | const char *methodname[] = { | |
| 83 | "Successive Linear Problems", | ||
| 84 | "Contour Integral" | ||
| 85 | }; | ||
| 86 | 20 | const int nmeth=PETSC_STATIC_ARRAY_LENGTH(methodname); | |
| 87 | |||
| 88 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 89 |
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)); |
| 90 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) { |
| 91 |
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])); |
| 92 | #if defined(PETSC_USE_COMPLEX) | ||
| 93 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
15 | if (ds->method==1) { /* contour integral method */ |
| 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,"number of integration points: %" PetscInt_FMT "\n",ctx->nnod)); |
| 95 |
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)); |
| 96 |
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)); |
| 97 |
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)); |
| 98 |
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)); |
| 99 | } | ||
| 100 | #endif | ||
| 101 |
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)); |
| 102 |
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); |
| 103 | } | ||
| 104 | ✗ | for (i=0;i<ctx->nf;i++) { | |
| 105 | ✗ | PetscCall(FNView(ctx->f[i],viewer)); | |
| 106 | ✗ | PetscCall(DSViewMat(ds,viewer,DSMatExtra[i])); | |
| 107 | } | ||
| 108 | ✗ | if (ds->state>DS_STATE_INTERMEDIATE) PetscCall(DSViewMat(ds,viewer,DS_MAT_X)); | |
| 109 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 110 | } | ||
| 111 | |||
| 112 | 266 | static PetscErrorCode DSVectors_NEP(DS ds,DSMatType mat,PetscInt *j,PetscReal *rnorm) | |
| 113 | { | ||
| 114 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
266 | PetscFunctionBegin; |
| 115 |
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"); |
| 116 |
1/3✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
|
266 | switch (mat) { |
| 117 | case DS_MAT_X: | ||
| 118 | 54 | break; | |
| 119 | ✗ | case DS_MAT_Y: | |
| 120 | − | SETERRQ(PetscObjectComm((PetscObject)ds),PETSC_ERR_SUP,"Not implemented yet"); | |
| 121 | ✗ | default: | |
| 122 | − | SETERRQ(PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Invalid mat parameter"); | |
| 123 | } | ||
| 124 |
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); |
| 125 | } | ||
| 126 | |||
| 127 | 148 | static PetscErrorCode DSSort_NEP(DS ds,PetscScalar *wr,PetscScalar *wi,PetscScalar *rr,PetscScalar *ri,PetscInt *dummy) | |
| 128 | { | ||
| 129 | 148 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 130 | 148 | PetscInt n,l,i,*perm,lds; | |
| 131 | 148 | PetscScalar *Q; | |
| 132 | |||
| 133 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
148 | PetscFunctionBegin; |
| 134 |
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); |
| 135 |
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 */ |
| 136 | 133 | n = ds->n*ctx->max_mid; | |
| 137 | 133 | lds = ds->ld*ctx->max_mid; | |
| 138 | 133 | l = ds->l; | |
| 139 | 133 | perm = ds->perm; | |
| 140 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
5039 | for (i=0;i<n;i++) perm[i] = i; |
| 141 |
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)); |
| 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.
|
15 | else PetscCall(DSSortEigenvalues_Private(ds,wr,NULL,perm,PETSC_FALSE)); |
| 143 |
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)); |
| 144 |
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]]; |
| 145 |
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]; |
| 146 |
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)); |
| 147 | /* n != ds->n */ | ||
| 148 |
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)); |
| 149 |
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); |
| 150 | } | ||
| 151 | |||
| 152 | #if defined(SLEPC_MISSING_LAPACK_GGEV3) | ||
| 153 | #define LAPGEEV "ggev" | ||
| 154 | #else | ||
| 155 | #define LAPGEEV "ggev3" | ||
| 156 | #endif | ||
| 157 | |||
| 158 | 1730 | static PetscErrorCode DSSolve_NEP_SLP(DS ds,PetscScalar *wr,PetscScalar *wi) | |
| 159 | { | ||
| 160 | 1730 | PetscScalar *A,*B,*W,*X,*work,*alpha,*beta,a; | |
| 161 | 1730 | PetscScalar sigma,lambda,mu,re,re2,sone=1.0,szero=0.0; | |
| 162 | 1730 | PetscBLASInt n,ld,lwork,one=1,zero=0; | |
| 163 | 1730 | PetscInt it,pos,j,maxit=100,result; | |
| 164 | 1730 | PetscReal norm,tol,done=1.0; | |
| 165 | #if !defined(PETSC_USE_COMPLEX) | ||
| 166 | 925 | PetscReal *alphai,im,im2; | |
| 167 | #endif | ||
| 168 | |||
| 169 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1730 | PetscFunctionBegin; |
| 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->n,&n)); |
| 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(PetscBLASIntCast(ds->ld,&ld)); |
| 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_A)); |
| 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_B)); |
| 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(DSAllocateMat_Private(ds,DS_MAT_W)); |
| 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_A],&A)); |
| 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_B],&B)); |
| 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_W],&W)); |
| 178 |
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)); |
| 179 | |||
| 180 | /* workspace query and memory allocation */ | ||
| 181 | 1730 | lwork = -1; | |
| 182 | #if defined(PETSC_USE_COMPLEX) | ||
| 183 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
805 | PetscCallLAPACKInfo("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&n,A,&ld,B,&ld,NULL,NULL,NULL,&ld,W,&ld,&a,&lwork,NULL,&info)); |
| 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(PetscBLASIntCast((PetscInt)PetscRealPart(a),&lwork)); |
| 185 |
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)); |
| 186 | 805 | alpha = ds->work; | |
| 187 | 805 | beta = ds->work + ds->n; | |
| 188 | 805 | work = ds->work + 2*ds->n; | |
| 189 | #else | ||
| 190 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
925 | PetscCallLAPACKInfo("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&n,A,&ld,B,&ld,NULL,NULL,NULL,NULL,&ld,W,&ld,&a,&lwork,&info)); |
| 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(PetscBLASIntCast((PetscInt)a,&lwork)); |
| 192 |
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)); |
| 193 | 925 | alpha = ds->work; | |
| 194 | 925 | beta = ds->work + ds->n; | |
| 195 | 925 | alphai = ds->work + 2*ds->n; | |
| 196 | 925 | work = ds->work + 3*ds->n; | |
| 197 | #endif | ||
| 198 | |||
| 199 | 1730 | sigma = 0.0; | |
| 200 |
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; |
| 201 | 1730 | lambda = sigma; | |
| 202 | 1730 | tol = n*PETSC_MACHINE_EPSILON/PetscSqrtReal(PETSC_SQRT_MACHINE_EPSILON); | |
| 203 | |||
| 204 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
5430 | for (it=0;it<maxit;it++) { |
| 205 | |||
| 206 | /* evaluate T and T' */ | ||
| 207 |
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)); |
| 208 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5430 | if (it) { |
| 209 |
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)); |
| 210 | 3700 | norm = BLASnrm2_(&n,X+ld,&one); | |
| 211 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3700 | if (norm/PetscAbsScalar(lambda)<=tol) break; |
| 212 | } | ||
| 213 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3700 | PetscCall(DSNEPComputeMatrix(ds,lambda,PETSC_TRUE,DS_MAT_B)); |
| 214 | |||
| 215 | /* compute eigenvalue correction mu and eigenvector u */ | ||
| 216 | #if defined(PETSC_USE_COMPLEX) | ||
| 217 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
1735 | PetscCallLAPACKInfo("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&n,A,&ld,B,&ld,alpha,beta,NULL,&ld,W,&ld,work,&lwork,ds->rwork,&info)); |
| 218 | #else | ||
| 219 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
1965 | PetscCallLAPACKInfo("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&n,A,&ld,B,&ld,alpha,alphai,beta,NULL,&ld,W,&ld,work,&lwork,&info)); |
| 220 | #endif | ||
| 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 | 7594 | re = re2; | |
| 243 | #if !defined(PETSC_USE_COMPLEX) | ||
| 244 | 4704 | im = im2; | |
| 245 | #endif | ||
| 246 | 7594 | 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 |
13/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 not taken.
✓ Branch 7 taken 10 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.
✗ 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.
|
3700 | PetscCallLAPACKInfo("LAPACKlascl",LAPACKlascl_("G",&zero,&zero,&norm,&done,&n,&one,X,&n,&info)); |
| 257 | |||
| 258 | /* correct eigenvalue approximation */ | ||
| 259 | 3700 | lambda = lambda - mu; | |
| 260 | } | ||
| 261 |
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)); |
| 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_B],&B)); |
| 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_W],&W)); |
| 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_X],&X)); |
| 265 | |||
| 266 |
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"); |
| 267 | 1730 | ds->t = 1; | |
| 268 | 1730 | wr[0] = lambda; | |
| 269 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1730 | if (wi) wi[0] = 0.0; |
| 270 |
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); |
| 271 | } | ||
| 272 | |||
| 273 | #if defined(PETSC_USE_COMPLEX) | ||
| 274 | /* | ||
| 275 | Newton refinement for eigenpairs computed with contour integral. | ||
| 276 | k - number of eigenpairs to refine | ||
| 277 | wr - eigenvalues (eigenvectors are stored in DS_MAT_X) | ||
| 278 | */ | ||
| 279 | 133 | static PetscErrorCode DSNEPNewtonRefine(DS ds,PetscInt k,PetscScalar *wr) | |
| 280 | { | ||
| 281 | 133 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 282 | 133 | PetscScalar *X,*W,*U,*R,sone=1.0,szero=0.0; | |
| 283 | 133 | PetscReal norm; | |
| 284 | 133 | PetscInt i,j,ii,nwu=0,*p,jstart=0,jend=k; | |
| 285 | 133 | const PetscInt *range; | |
| 286 | 133 | PetscBLASInt n,*perm,ld,one=1,n1; | |
| 287 | 133 | PetscMPIInt len,size,root; | |
| 288 | 133 | PetscLayout map; | |
| 289 | |||
| 290 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
133 | PetscFunctionBegin; |
| 291 |
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)); |
| 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(PetscBLASIntCast(ds->n,&n)); |
| 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->ld,&ld)); |
| 294 | 133 | n1 = n+1; | |
| 295 | 133 | p = ds->perm; | |
| 296 |
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)); |
| 297 |
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)); |
| 298 | 133 | U = ds->work+nwu; nwu += (n+1)*(n+1); | |
| 299 | 133 | R = ds->work+nwu; /*nwu += n+1;*/ | |
| 300 | 133 | perm = ds->iwork; | |
| 301 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
133 | if (ds->pmode==DS_PARALLEL_DISTRIBUTED) { |
| 302 |
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)); |
| 303 |
3/6✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
20 | PetscCall(PetscLayoutGetRange(map,&jstart,&jend)); |
| 304 | } | ||
| 305 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
517 | for (ii=0;ii<ctx->Nit;ii++) { |
| 306 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2040 | for (j=jstart;j<jend;j++) { |
| 307 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1656 | if (p[j]<2) { |
| 308 |
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)); |
| 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(MatDenseGetArray(ds->omat[DS_MAT_W],&W)); |
| 310 |
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)); |
| 311 |
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)); |
| 312 | 670 | norm = BLASnrm2_(&n,R,&one); | |
| 313 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
670 | if (norm/PetscAbsScalar(wr[j]) > ctx->rtol) { |
| 314 |
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])))); |
| 315 | 103 | p[j] = 1; | |
| 316 | 103 | R[n] = 0.0; | |
| 317 |
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)); |
| 318 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1716 | for (i=0;i<n;i++) { |
| 319 |
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)); |
| 320 | 1613 | U[n+i*n1] = PetscConj(X[j*ld+i]); | |
| 321 | } | ||
| 322 |
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)); |
| 323 | 103 | U[n+n*n1] = 0.0; | |
| 324 |
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)); |
| 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(MatDenseGetArray(ds->omat[DS_MAT_W],&W)); |
| 326 |
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)); |
| 327 |
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)); |
| 328 | /* solve system */ | ||
| 329 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
103 | PetscCallLAPACKInfo("LAPACKgetrf",LAPACKgetrf_(&n1,&n1,U,&n1,perm,&info)); |
| 330 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
103 | PetscCallLAPACKInfo("LAPACKgetrs",LAPACKgetrs_("N",&n1,&one,U,&n1,perm,R,&n1,&info)); |
| 331 | 103 | wr[j] -= R[n]; | |
| 332 |
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]; |
| 333 | /* normalization */ | ||
| 334 | 103 | norm = BLASnrm2_(&n,X+ld*j,&one); | |
| 335 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1819 | for (i=0;i<n;i++) X[ld*j+i] /= norm; |
| 336 | 567 | } else p[j] = 2; | |
| 337 | } | ||
| 338 | } | ||
| 339 | } | ||
| 340 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
133 | if (ds->pmode==DS_PARALLEL_DISTRIBUTED) { /* communicate results */ |
| 341 |
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)); |
| 342 |
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))); |
| 343 |
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)); |
| 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(PetscLayoutGetRanges(map,&range)); |
| 345 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
100 | for (j=0;j<k;j++) { |
| 346 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
80 | if (p[j]) { /* j-th eigenpair has been refined */ |
| 347 |
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; |
| 348 |
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)); |
| 349 |
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))); |
| 350 |
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)); |
| 351 |
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))); |
| 352 | } | ||
| 353 | } | ||
| 354 |
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)); |
| 355 | } | ||
| 356 |
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)); |
| 357 |
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); |
| 358 | } | ||
| 359 | |||
| 360 | 133 | PetscErrorCode DSSolve_NEP_Contour(DS ds,PetscScalar *wr,PetscScalar *wi) | |
| 361 | { | ||
| 362 | 133 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 363 | 133 | PetscScalar *alpha,*beta,*Q,*Z,*X,*U,*V,*W,*work,*Rc,*R,*w,*z,*zn,*S; | |
| 364 | 133 | PetscScalar sone=1.0,szero=0.0,center,a; | |
| 365 | 133 | PetscReal *rwork,norm,radius,vscale,rgscale,*sigma; | |
| 366 | 133 | PetscBLASInt n,*perm,p,pp,ld,lwork,k_,rk_,colA,rowA,one=1; | |
| 367 | 133 | PetscInt mid,lds,nnod=ctx->nnod,k,i,ii,jj,j,s,off,rk,nwu=0,nw,lrwork,*inside,kstart=0,kend=nnod; | |
| 368 | 133 | PetscMPIInt len; | |
| 369 | 133 | PetscBool isellipse; | |
| 370 | 133 | PetscRandom rand; | |
| 371 | |||
| 372 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
133 | PetscFunctionBegin; |
| 373 |
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()"); |
| 374 | /* Contour parameters */ | ||
| 375 |
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)); |
| 376 |
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"); |
| 377 |
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)); |
| 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(RGGetScale(ctx->rg,&rgscale)); |
| 379 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
133 | if (ds->pmode==DS_PARALLEL_DISTRIBUTED) { |
| 380 |
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)); |
| 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.
|
20 | PetscCall(PetscLayoutGetRange(ctx->map,&kstart,&kend)); |
| 382 | } | ||
| 383 | |||
| 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.
|
133 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_W)); /* size n */ |
| 385 |
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 */ |
| 386 |
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 */ |
| 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_U)); /* size mid*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_V)); /* 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(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 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(MatDenseGetArray(ds->omat[DS_MAT_Z],&Z)); |
| 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(MatDenseGetArray(ds->omat[DS_MAT_U],&U)); |
| 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_V],&V)); |
| 393 | 133 | mid = ctx->max_mid; | |
| 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(PetscBLASIntCast(ds->n,&n)); |
| 395 | 133 | p = n; /* maximum number of columns for the probing matrix */ | |
| 396 |
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)); |
| 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(mid*n,&rowA)); |
| 398 | 133 | nw = 2*n*(p+mid)+3*nnod+2*mid*n*p; | |
| 399 | 133 | lrwork = 9*mid*n; | |
| 400 | |||
| 401 | /* workspace query and memory allocation */ | ||
| 402 | 133 | lwork = -1; | |
| 403 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
133 | PetscCallLAPACKInfo("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&rowA,Q,&rowA,Z,&rowA,NULL,NULL,NULL,&ld,V,&rowA,&a,&lwork,NULL,&info)); |
| 404 |
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)); |
| 405 |
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)); |
| 406 | |||
| 407 | 133 | sigma = ds->rwork; | |
| 408 | 133 | rwork = ds->rwork+mid*n; | |
| 409 | 133 | perm = ds->iwork; | |
| 410 | 133 | z = ds->work+nwu; nwu += nnod; /* quadrature points */ | |
| 411 | 133 | zn = ds->work+nwu; nwu += nnod; /* normalized quadrature points */ | |
| 412 | 133 | w = ds->work+nwu; nwu += nnod; /* quadrature weights */ | |
| 413 | 133 | Rc = ds->work+nwu; nwu += n*p; | |
| 414 | 133 | R = ds->work+nwu; nwu += n*p; | |
| 415 | 133 | alpha = ds->work+nwu; nwu += mid*n; | |
| 416 | 133 | beta = ds->work+nwu; nwu += mid*n; | |
| 417 | 133 | S = ds->work+nwu; nwu += 2*mid*n*p; | |
| 418 | 133 | work = ds->work+nwu; | |
| 419 | |||
| 420 | /* Compute quadrature parameters */ | ||
| 421 |
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)); |
| 422 | |||
| 423 | /* Set random matrix */ | ||
| 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(PetscRandomCreate(PetscObjectComm((PetscObject)ds),&rand)); |
| 425 |
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)); |
| 426 |
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)); |
| 427 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1397 | for (j=0;j<p;j++) |
| 428 |
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)); |
| 429 |
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)); |
| 430 | /* Loop of integration points */ | ||
| 431 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
7445 | for (k=kstart;k<kend;k++) { |
| 432 |
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)); |
| 433 |
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)); |
| 434 |
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)); |
| 435 | |||
| 436 | /* LU factorization */ | ||
| 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(MatDenseGetArray(ds->omat[DS_MAT_W],&W)); |
| 438 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
7312 | PetscCallLAPACKInfo("LAPACKgetrf",LAPACKgetrf_(&n,&n,W,&ld,perm,&info)); |
| 439 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
7312 | PetscCallLAPACKInfo("LAPACKgetrs",LAPACKgetrs_("N",&n,&p,W,&ld,perm,R,&n,&info)); |
| 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(MatDenseRestoreArray(ds->omat[DS_MAT_W],&W)); |
| 441 | |||
| 442 | /* Moments computation */ | ||
| 443 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65328 | for (s=0;s<2*ctx->max_mid;s++) { |
| 444 | 58016 | off = s*n*p; | |
| 445 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
627424 | for (j=0;j<p;j++) |
| 446 |
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]; |
| 447 | 58016 | w[k] *= zn[k]; | |
| 448 | } | ||
| 449 | } | ||
| 450 | |||
| 451 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
133 | if (ds->pmode==DS_PARALLEL_DISTRIBUTED) { /* compute final S via reduction */ |
| 452 |
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)); |
| 453 |
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))); |
| 454 | } | ||
| 455 |
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)); |
| 456 | 133 | pp = p; | |
| 457 | 133 | do { | |
| 458 | 133 | p = pp; | |
| 459 |
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)); |
| 460 | |||
| 461 |
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)); |
| 462 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
650 | for (jj=0;jj<mid;jj++) { |
| 463 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2570 | for (ii=0;ii<mid;ii++) { |
| 464 | 2053 | off = jj*p*rowA+ii*n; | |
| 465 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
21527 | for (j=0;j<p;j++) |
| 466 |
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]; |
| 467 | } | ||
| 468 | } | ||
| 469 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
133 | PetscCallLAPACKInfo("LAPACKgesvd",LAPACKgesvd_("S","S",&rowA,&colA,Q,&rowA,sigma,U,&rowA,V,&colA,work,&lwork,rwork,&info)); |
| 470 | |||
| 471 | 133 | rk = colA; | |
| 472 |
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;} |
| 473 |
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; |
| 474 | ✗ | pp *= 2; | |
| 475 | ✗ | } while (pp<=n); | |
| 476 |
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)); |
| 477 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
650 | for (jj=0;jj<mid;jj++) { |
| 478 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2570 | for (ii=0;ii<mid;ii++) { |
| 479 | 2053 | off = jj*p*rowA+ii*n; | |
| 480 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
21527 | for (j=0;j<p;j++) |
| 481 |
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]; |
| 482 | } | ||
| 483 | } | ||
| 484 |
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_)); |
| 485 |
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)); |
| 486 |
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_)); |
| 487 |
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)); |
| 488 |
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]; |
| 489 |
13/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 not taken.
✓ Branch 7 taken 5 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.
✗ 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.
|
133 | PetscCallLAPACKInfo("LAPACK" LAPGEEV,LAPACKggevalt_("N","V",&rk_,Q,&rk_,Z,&rk_,alpha,beta,NULL,&ld,V,&rk_,work,&lwork,rwork,&info)); |
| 490 |
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; |
| 491 |
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)); |
| 492 |
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)); |
| 493 | k=0; | ||
| 494 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
941 | for (i=0;i<rk;i++) |
| 495 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
808 | if (inside[i]==1) inside[k++] = i; |
| 496 | /* Discard values outside region */ | ||
| 497 | 133 | lds = ld*mid; | |
| 498 |
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)); |
| 499 |
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)); |
| 500 |
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; |
| 501 |
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]]; |
| 502 |
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]; |
| 503 |
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]; |
| 504 |
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_)); |
| 505 |
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)); |
| 506 |
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)); |
| 507 | /* Normalize */ | ||
| 508 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
760 | for (j=0;j<k;j++) { |
| 509 | 627 | norm = BLASnrm2_(&n,X+ld*j,&one); | |
| 510 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
7665 | for (i=0;i<n;i++) X[ld*j+i] /= norm; |
| 511 | } | ||
| 512 |
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)); |
| 513 |
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)); |
| 514 |
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)); |
| 515 |
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)); |
| 516 |
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)); |
| 517 |
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)); |
| 518 | |||
| 519 | /* Newton refinement */ | ||
| 520 |
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)); |
| 521 | 133 | ds->t = k; | |
| 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(PetscRandomDestroy(&rand)); |
| 523 |
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); |
| 524 | } | ||
| 525 | #endif | ||
| 526 | |||
| 527 | #if !defined(PETSC_HAVE_MPIUNI) | ||
| 528 | 360 | static PetscErrorCode DSSynchronize_NEP(DS ds,PetscScalar eigr[],PetscScalar eigi[]) | |
| 529 | { | ||
| 530 | 360 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 531 | 360 | PetscInt ld=ds->ld,k=0; | |
| 532 | 360 | PetscMPIInt n,n2,rank,size,off=0; | |
| 533 | 360 | PetscScalar *X; | |
| 534 | |||
| 535 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
360 | PetscFunctionBegin; |
| 536 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
360 | if (!ds->method) { /* SLP */ |
| 537 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
360 | if (ds->state>=DS_STATE_CONDENSED) k += ds->n; |
| 538 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
360 | if (eigr) k += 1; |
| 539 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
360 | if (eigi) k += 1; |
| 540 |
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)); |
| 541 |
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)); |
| 542 | } else { /* Contour */ | ||
| 543 | ✗ | if (ds->state>=DS_STATE_CONDENSED) k += ctx->max_mid*ds->n*ld; | |
| 544 | ✗ | if (eigr) k += ctx->max_mid*ds->n; | |
| 545 | ✗ | if (eigi) k += ctx->max_mid*ds->n; | |
| 546 | ✗ | PetscCall(PetscMPIIntCast(ctx->max_mid*ds->n,&n)); | |
| 547 | ✗ | PetscCall(PetscMPIIntCast(ctx->max_mid*ds->n*ld,&n2)); | |
| 548 | } | ||
| 549 |
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)); |
| 550 |
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)); |
| 551 |
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)); |
| 552 |
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)); |
| 553 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
360 | if (!rank) { |
| 554 |
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))); |
| 555 |
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))); |
| 556 | #if !defined(PETSC_USE_COMPLEX) | ||
| 557 |
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))); |
| 558 | #endif | ||
| 559 | } | ||
| 560 |
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))); |
| 561 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
360 | if (rank) { |
| 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 (ds->state>=DS_STATE_CONDENSED) PetscCallMPI(MPI_Unpack(ds->work,size,&off,X,n2,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 563 |
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))); |
| 564 | #if !defined(PETSC_USE_COMPLEX) | ||
| 565 |
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))); |
| 566 | #endif | ||
| 567 | } | ||
| 568 |
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)); |
| 569 |
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); |
| 570 | } | ||
| 571 | #endif | ||
| 572 | |||
| 573 | 297 | static PetscErrorCode DSNEPSetFN_NEP(DS ds,PetscInt n,FN fn[]) | |
| 574 | { | ||
| 575 | 297 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 576 | 297 | PetscInt i; | |
| 577 | |||
| 578 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
297 | PetscFunctionBegin; |
| 579 |
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); |
| 580 |
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); |
| 581 |
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")); |
| 582 |
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])); |
| 583 |
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])); |
| 584 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1173 | for (i=0;i<n;i++) ctx->f[i] = fn[i]; |
| 585 | 297 | ctx->nf = n; | |
| 586 |
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); |
| 587 | } | ||
| 588 | |||
| 589 | /*@ | ||
| 590 | DSNEPSetFN - Sets a number of functions that define the nonlinear | ||
| 591 | eigenproblem. | ||
| 592 | |||
| 593 | Collective | ||
| 594 | |||
| 595 | Input Parameters: | ||
| 596 | + ds - the direct solver context | ||
| 597 | . n - number of functions | ||
| 598 | - fn - array of functions | ||
| 599 | |||
| 600 | Notes: | ||
| 601 | The nonlinear eigenproblem is defined in terms of the split nonlinear | ||
| 602 | operator $T(\lambda) = \sum_i E_i f_i(\lambda)$. | ||
| 603 | |||
| 604 | This function must be called before `DSAllocate()`. Then `DSAllocate()` | ||
| 605 | will allocate an extra matrix $E_i$ per each function, that can be | ||
| 606 | filled in the usual way. | ||
| 607 | |||
| 608 | Level: advanced | ||
| 609 | |||
| 610 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetFN()`, `DSAllocate()` | ||
| 611 | @*/ | ||
| 612 | 297 | PetscErrorCode DSNEPSetFN(DS ds,PetscInt n,FN fn[]) | |
| 613 | { | ||
| 614 | 297 | PetscInt i; | |
| 615 | |||
| 616 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
297 | PetscFunctionBegin; |
| 617 |
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); |
| 618 |
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); |
| 619 |
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); |
| 620 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1173 | for (i=0;i<n;i++) { |
| 621 |
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); |
| 622 |
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); |
| 623 | } | ||
| 624 |
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)); |
| 625 |
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); |
| 626 | } | ||
| 627 | |||
| 628 | 45 | static PetscErrorCode DSNEPGetFN_NEP(DS ds,PetscInt k,FN *fn) | |
| 629 | { | ||
| 630 | 45 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 631 | |||
| 632 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
45 | PetscFunctionBegin; |
| 633 |
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); |
| 634 | 45 | *fn = ctx->f[k]; | |
| 635 |
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); |
| 636 | } | ||
| 637 | |||
| 638 | /*@ | ||
| 639 | DSNEPGetFN - Gets the functions associated with the nonlinear `DS`. | ||
| 640 | |||
| 641 | Not Collective | ||
| 642 | |||
| 643 | Input Parameters: | ||
| 644 | + ds - the direct solver context | ||
| 645 | - k - the index of the requested function (starting in 0) | ||
| 646 | |||
| 647 | Output Parameter: | ||
| 648 | . fn - the function | ||
| 649 | |||
| 650 | Level: advanced | ||
| 651 | |||
| 652 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetFN()` | ||
| 653 | @*/ | ||
| 654 | 45 | PetscErrorCode DSNEPGetFN(DS ds,PetscInt k,FN *fn) | |
| 655 | { | ||
| 656 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
45 | PetscFunctionBegin; |
| 657 |
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); |
| 658 |
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); |
| 659 |
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)); |
| 660 |
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); |
| 661 | } | ||
| 662 | |||
| 663 | 25 | static PetscErrorCode DSNEPGetNumFN_NEP(DS ds,PetscInt *n) | |
| 664 | { | ||
| 665 | 25 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 666 | |||
| 667 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
25 | PetscFunctionBegin; |
| 668 | 25 | *n = ctx->nf; | |
| 669 |
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); |
| 670 | } | ||
| 671 | |||
| 672 | /*@ | ||
| 673 | DSNEPGetNumFN - Returns the number of functions stored internally by | ||
| 674 | the `DS`. | ||
| 675 | |||
| 676 | Not Collective | ||
| 677 | |||
| 678 | Input Parameter: | ||
| 679 | . ds - the direct solver context | ||
| 680 | |||
| 681 | Output Parameter: | ||
| 682 | . n - the number of functions passed in `DSNEPSetFN()` | ||
| 683 | |||
| 684 | Level: advanced | ||
| 685 | |||
| 686 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetFN()` | ||
| 687 | @*/ | ||
| 688 | 25 | PetscErrorCode DSNEPGetNumFN(DS ds,PetscInt *n) | |
| 689 | { | ||
| 690 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
25 | PetscFunctionBegin; |
| 691 |
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); |
| 692 |
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); |
| 693 |
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)); |
| 694 |
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); |
| 695 | } | ||
| 696 | |||
| 697 | 10 | static PetscErrorCode DSNEPSetMinimality_NEP(DS ds,PetscInt n) | |
| 698 | { | ||
| 699 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 700 | |||
| 701 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 702 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (n == PETSC_DECIDE || n == PETSC_DEFAULT) ctx->max_mid = 4; |
| 703 | else { | ||
| 704 |
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"); |
| 705 | 10 | ctx->max_mid = n; | |
| 706 | } | ||
| 707 |
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); |
| 708 | } | ||
| 709 | |||
| 710 | /*@ | ||
| 711 | DSNEPSetMinimality - Sets the maximum minimality index used internally by | ||
| 712 | the `DSNEP`. | ||
| 713 | |||
| 714 | Logically Collective | ||
| 715 | |||
| 716 | Input Parameters: | ||
| 717 | + ds - the direct solver context | ||
| 718 | - n - the maximum minimality index | ||
| 719 | |||
| 720 | Options Database Key: | ||
| 721 | . -ds_nep_minimality n - sets the maximum minimality index | ||
| 722 | |||
| 723 | Notes: | ||
| 724 | The maximum minimality index is used only in the contour integral method, | ||
| 725 | and is related to the highest moments used in the method. The default | ||
| 726 | value is 1, a larger value might give better accuracy in some cases, but | ||
| 727 | at a higher cost. | ||
| 728 | |||
| 729 | Level: advanced | ||
| 730 | |||
| 731 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetMinimality()` | ||
| 732 | @*/ | ||
| 733 | 10 | PetscErrorCode DSNEPSetMinimality(DS ds,PetscInt n) | |
| 734 | { | ||
| 735 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 736 |
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); |
| 737 |
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); |
| 738 |
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)); |
| 739 |
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); |
| 740 | } | ||
| 741 | |||
| 742 | 864 | static PetscErrorCode DSNEPGetMinimality_NEP(DS ds,PetscInt *n) | |
| 743 | { | ||
| 744 | 864 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 745 | |||
| 746 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
864 | PetscFunctionBegin; |
| 747 | 864 | *n = ctx->max_mid; | |
| 748 |
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); |
| 749 | } | ||
| 750 | |||
| 751 | /*@ | ||
| 752 | DSNEPGetMinimality - Returns the maximum minimality index used internally by | ||
| 753 | the `DSNEP`. | ||
| 754 | |||
| 755 | Not Collective | ||
| 756 | |||
| 757 | Input Parameter: | ||
| 758 | . ds - the direct solver context | ||
| 759 | |||
| 760 | Output Parameter: | ||
| 761 | . n - the maximum minimality index passed in `DSNEPSetMinimality()` | ||
| 762 | |||
| 763 | Level: advanced | ||
| 764 | |||
| 765 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetMinimality()` | ||
| 766 | @*/ | ||
| 767 | 864 | PetscErrorCode DSNEPGetMinimality(DS ds,PetscInt *n) | |
| 768 | { | ||
| 769 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
864 | PetscFunctionBegin; |
| 770 |
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); |
| 771 |
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); |
| 772 |
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)); |
| 773 |
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); |
| 774 | } | ||
| 775 | |||
| 776 | 35 | static PetscErrorCode DSNEPSetRefine_NEP(DS ds,PetscReal tol,PetscInt its) | |
| 777 | { | ||
| 778 | 35 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 779 | |||
| 780 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
35 | PetscFunctionBegin; |
| 781 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
35 | if (tol == (PetscReal)PETSC_DETERMINE) { |
| 782 | ✗ | ctx->rtol = PETSC_MACHINE_EPSILON/PetscSqrtReal(PETSC_SQRT_MACHINE_EPSILON); | |
| 783 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
35 | } else if (tol != (PetscReal)PETSC_CURRENT) { |
| 784 |
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"); |
| 785 | 25 | ctx->rtol = tol; | |
| 786 | } | ||
| 787 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
35 | if (its == PETSC_DETERMINE) { |
| 788 | 20 | ctx->Nit = 3; | |
| 789 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
15 | } else if (its != PETSC_CURRENT) { |
| 790 |
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"); |
| 791 | 15 | ctx->Nit = its; | |
| 792 | } | ||
| 793 |
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); |
| 794 | } | ||
| 795 | |||
| 796 | /*@ | ||
| 797 | DSNEPSetRefine - Sets the tolerance and the number of iterations of Newton iterative | ||
| 798 | refinement for eigenpairs when solving a `DSNEP`. | ||
| 799 | |||
| 800 | Logically Collective | ||
| 801 | |||
| 802 | Input Parameters: | ||
| 803 | + ds - the direct solver context | ||
| 804 | . tol - the tolerance | ||
| 805 | - its - the number of iterations | ||
| 806 | |||
| 807 | Options Database Keys: | ||
| 808 | + -ds_nep_refine_tol tol - sets the tolerance | ||
| 809 | - -ds_nep_refine_its its - sets the number of Newton iterations | ||
| 810 | |||
| 811 | Notes: | ||
| 812 | Iterative refinement of eigenpairs is currently used only in the contour | ||
| 813 | integral method. | ||
| 814 | |||
| 815 | Use `PETSC_CURRENT` to retain the current value of any of the parameters. | ||
| 816 | Use `PETSC_DETERMINE` for either argument to assign a default value computed | ||
| 817 | internally. | ||
| 818 | |||
| 819 | Level: advanced | ||
| 820 | |||
| 821 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetRefine()` | ||
| 822 | @*/ | ||
| 823 | 35 | PetscErrorCode DSNEPSetRefine(DS ds,PetscReal tol,PetscInt its) | |
| 824 | { | ||
| 825 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
35 | PetscFunctionBegin; |
| 826 |
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); |
| 827 |
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); |
| 828 |
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); |
| 829 |
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)); |
| 830 |
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); |
| 831 | } | ||
| 832 | |||
| 833 | 10 | static PetscErrorCode DSNEPGetRefine_NEP(DS ds,PetscReal *tol,PetscInt *its) | |
| 834 | { | ||
| 835 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 836 | |||
| 837 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 838 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (tol) *tol = ctx->rtol; |
| 839 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (its) *its = ctx->Nit; |
| 840 |
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); |
| 841 | } | ||
| 842 | |||
| 843 | /*@ | ||
| 844 | DSNEPGetRefine - Returns the tolerance and the number of iterations of Newton iterative | ||
| 845 | refinement for eigenpairs. | ||
| 846 | |||
| 847 | Not Collective | ||
| 848 | |||
| 849 | Input Parameter: | ||
| 850 | . ds - the direct solver context | ||
| 851 | |||
| 852 | Output Parameters: | ||
| 853 | + tol - the tolerance | ||
| 854 | - its - the number of iterations | ||
| 855 | |||
| 856 | Level: advanced | ||
| 857 | |||
| 858 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetRefine()` | ||
| 859 | @*/ | ||
| 860 | 10 | PetscErrorCode DSNEPGetRefine(DS ds,PetscReal *tol,PetscInt *its) | |
| 861 | { | ||
| 862 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 863 |
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); |
| 864 |
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)); |
| 865 |
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); |
| 866 | } | ||
| 867 | |||
| 868 | 10 | static PetscErrorCode DSNEPSetIntegrationPoints_NEP(DS ds,PetscInt ip) | |
| 869 | { | ||
| 870 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 871 | |||
| 872 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 873 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (ip == PETSC_DECIDE || ip == PETSC_DEFAULT) ctx->nnod = 64; |
| 874 | else { | ||
| 875 |
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"); |
| 876 | 10 | ctx->nnod = ip; | |
| 877 | } | ||
| 878 |
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 */ |
| 879 |
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); |
| 880 | } | ||
| 881 | |||
| 882 | /*@ | ||
| 883 | DSNEPSetIntegrationPoints - Sets the number of integration points to be | ||
| 884 | used in the contour integral method when solving a `DSNEP`. | ||
| 885 | |||
| 886 | Logically Collective | ||
| 887 | |||
| 888 | Input Parameters: | ||
| 889 | + ds - the direct solver context | ||
| 890 | - ip - the number of integration points | ||
| 891 | |||
| 892 | Options Database Key: | ||
| 893 | . -ds_nep_integration_points ip - sets the number of integration points | ||
| 894 | |||
| 895 | Notes: | ||
| 896 | This parameter is relevant only in the contour integral method. | ||
| 897 | |||
| 898 | Level: advanced | ||
| 899 | |||
| 900 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetIntegrationPoints()` | ||
| 901 | @*/ | ||
| 902 | 10 | PetscErrorCode DSNEPSetIntegrationPoints(DS ds,PetscInt ip) | |
| 903 | { | ||
| 904 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 905 |
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); |
| 906 |
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); |
| 907 |
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)); |
| 908 |
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); |
| 909 | } | ||
| 910 | |||
| 911 | 10 | static PetscErrorCode DSNEPGetIntegrationPoints_NEP(DS ds,PetscInt *ip) | |
| 912 | { | ||
| 913 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 914 | |||
| 915 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 916 | 10 | *ip = ctx->nnod; | |
| 917 |
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); |
| 918 | } | ||
| 919 | |||
| 920 | /*@ | ||
| 921 | DSNEPGetIntegrationPoints - Returns the number of integration points used | ||
| 922 | in the contour integral method. | ||
| 923 | |||
| 924 | Not Collective | ||
| 925 | |||
| 926 | Input Parameter: | ||
| 927 | . ds - the direct solver context | ||
| 928 | |||
| 929 | Output Parameter: | ||
| 930 | . ip - the number of integration points | ||
| 931 | |||
| 932 | Level: advanced | ||
| 933 | |||
| 934 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetIntegrationPoints()` | ||
| 935 | @*/ | ||
| 936 | 10 | PetscErrorCode DSNEPGetIntegrationPoints(DS ds,PetscInt *ip) | |
| 937 | { | ||
| 938 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 939 |
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); |
| 940 |
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); |
| 941 |
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)); |
| 942 |
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); |
| 943 | } | ||
| 944 | |||
| 945 | 10 | static PetscErrorCode DSNEPSetSamplingSize_NEP(DS ds,PetscInt p) | |
| 946 | { | ||
| 947 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 948 | |||
| 949 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 950 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (p == PETSC_DECIDE || p == PETSC_DEFAULT) ctx->spls = 0; |
| 951 | else { | ||
| 952 |
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"); |
| 953 |
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"); |
| 954 | 10 | ctx->spls = p; | |
| 955 | } | ||
| 956 |
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); |
| 957 | } | ||
| 958 | |||
| 959 | /*@ | ||
| 960 | DSNEPSetSamplingSize - Sets the number of sampling columns to be | ||
| 961 | used in the contour integral method when solving a `DSNEP`. | ||
| 962 | |||
| 963 | Logically Collective | ||
| 964 | |||
| 965 | Input Parameters: | ||
| 966 | + ds - the direct solver context | ||
| 967 | - p - the number of columns for the sampling matrix | ||
| 968 | |||
| 969 | Options Database Key: | ||
| 970 | . -ds_nep_sampling_size p - set the number of sampling columns | ||
| 971 | |||
| 972 | Note: | ||
| 973 | This parameter is relevant only in the contour integral method. | ||
| 974 | |||
| 975 | Level: advanced | ||
| 976 | |||
| 977 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetSamplingSize()` | ||
| 978 | @*/ | ||
| 979 | 10 | PetscErrorCode DSNEPSetSamplingSize(DS ds,PetscInt p) | |
| 980 | { | ||
| 981 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 982 |
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); |
| 983 |
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); |
| 984 |
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)); |
| 985 |
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); |
| 986 | } | ||
| 987 | |||
| 988 | 10 | static PetscErrorCode DSNEPGetSamplingSize_NEP(DS ds,PetscInt *p) | |
| 989 | { | ||
| 990 | 10 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 991 | |||
| 992 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 993 | 10 | *p = ctx->spls; | |
| 994 |
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); |
| 995 | } | ||
| 996 | |||
| 997 | /*@ | ||
| 998 | DSNEPGetSamplingSize - Returns the number of sampling columns used | ||
| 999 | in the contour integral method. | ||
| 1000 | |||
| 1001 | Not Collective | ||
| 1002 | |||
| 1003 | Input Parameter: | ||
| 1004 | . ds - the direct solver context | ||
| 1005 | |||
| 1006 | Output Parameter: | ||
| 1007 | . p - the number of columns for the sampling matrix | ||
| 1008 | |||
| 1009 | Level: advanced | ||
| 1010 | |||
| 1011 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetSamplingSize()` | ||
| 1012 | @*/ | ||
| 1013 | 10 | PetscErrorCode DSNEPGetSamplingSize(DS ds,PetscInt *p) | |
| 1014 | { | ||
| 1015 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 1016 |
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); |
| 1017 |
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); |
| 1018 |
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)); |
| 1019 |
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); |
| 1020 | } | ||
| 1021 | |||
| 1022 | 200 | static PetscErrorCode DSNEPSetComputeMatrixFunction_NEP(DS ds,DSNEPMatrixFunctionFn *fun,PetscCtx ctx,PetscCtxDestroyFn *destroy) | |
| 1023 | { | ||
| 1024 | 200 | DS_NEP *dsctx = (DS_NEP*)ds->data; | |
| 1025 | |||
| 1026 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
200 | PetscFunctionBegin; |
| 1027 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 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.
|
200 | if (dsctx->computematrixdestroy) PetscCall((*dsctx->computematrixdestroy)(&dsctx->computematrixctx)); |
| 1028 | 200 | dsctx->computematrix = fun; | |
| 1029 | 200 | dsctx->computematrixctx = ctx; | |
| 1030 | 200 | dsctx->computematrixdestroy = destroy; | |
| 1031 |
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); |
| 1032 | } | ||
| 1033 | |||
| 1034 | /*@C | ||
| 1035 | DSNEPSetComputeMatrixFunction - Sets a user-provided subroutine to compute | ||
| 1036 | the matrices $T(\lambda)$ or $T'(\lambda)$. | ||
| 1037 | |||
| 1038 | Logically Collective | ||
| 1039 | |||
| 1040 | Input Parameters: | ||
| 1041 | + ds - the direct solver context | ||
| 1042 | . fun - matrix function evaluation routine, see `DSNEPMatrixFunctionFn` for the calling sequence | ||
| 1043 | . ctx - a context pointer (the last parameter to the user function) | ||
| 1044 | - destroy - a routine for destroying the context (may be `NULL`), see `PetscCtxDestroyFn` | ||
| 1045 | for the calling sequence | ||
| 1046 | |||
| 1047 | Note: | ||
| 1048 | The result is computed as $T(\lambda) = \sum_i E_i f_i(\lambda)$, and similarly | ||
| 1049 | for the derivative, where $E_i$ are the extra matrices, see `DSMatType`. | ||
| 1050 | |||
| 1051 | Level: developer | ||
| 1052 | |||
| 1053 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetComputeMatrixFunction()` | ||
| 1054 | @*/ | ||
| 1055 | 200 | PetscErrorCode DSNEPSetComputeMatrixFunction(DS ds,DSNEPMatrixFunctionFn *fun,PetscCtx ctx,PetscCtxDestroyFn *destroy) | |
| 1056 | { | ||
| 1057 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
200 | PetscFunctionBegin; |
| 1058 |
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); |
| 1059 |
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*,PetscCtx,PetscCtxDestroyFn*),(ds,fun,ctx,destroy)); |
| 1060 |
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); |
| 1061 | } | ||
| 1062 | |||
| 1063 | 30 | static PetscErrorCode DSNEPGetComputeMatrixFunction_NEP(DS ds,DSNEPMatrixFunctionFn **fun,PetscCtxRt ctx,PetscCtxDestroyFn **destroy) | |
| 1064 | { | ||
| 1065 | 30 | DS_NEP *dsctx = (DS_NEP*)ds->data; | |
| 1066 | |||
| 1067 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
| 1068 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
30 | if (fun) *fun = dsctx->computematrix; |
| 1069 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
30 | if (ctx) *(void**)ctx = dsctx->computematrixctx; |
| 1070 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
30 | if (destroy) *destroy = dsctx->computematrixdestroy; |
| 1071 |
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.
|
30 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1072 | } | ||
| 1073 | |||
| 1074 | /*@C | ||
| 1075 | DSNEPGetComputeMatrixFunction - Returns the user-provided callback function | ||
| 1076 | set in `DSNEPSetComputeMatrixFunction()`. | ||
| 1077 | |||
| 1078 | Not Collective | ||
| 1079 | |||
| 1080 | Input Parameter: | ||
| 1081 | . ds - the direct solver context | ||
| 1082 | |||
| 1083 | Output Parameters: | ||
| 1084 | + fun - the pointer to the user function | ||
| 1085 | . ctx - the context pointer | ||
| 1086 | - destroy - a routine for destroying the context (may be `NULL`) | ||
| 1087 | |||
| 1088 | Level: developer | ||
| 1089 | |||
| 1090 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetComputeMatrixFunction()` | ||
| 1091 | @*/ | ||
| 1092 | 30 | PetscErrorCode DSNEPGetComputeMatrixFunction(DS ds,DSNEPMatrixFunctionFn **fun,PetscCtxRt ctx,PetscCtxDestroyFn **destroy) | |
| 1093 | { | ||
| 1094 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
| 1095 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 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.
|
30 | PetscValidHeaderSpecific(ds,DS_CLASSID,1); |
| 1096 |
9/16✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 5 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
|
30 | PetscUseMethod(ds,"DSNEPGetComputeMatrixFunction_C",(DS,DSNEPMatrixFunctionFn**,PetscCtxRt,PetscCtxDestroyFn**),(ds,fun,ctx,destroy)); |
| 1097 |
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.
|
30 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1098 | } | ||
| 1099 | |||
| 1100 | 137 | static PetscErrorCode DSNEPSetRG_NEP(DS ds,RG rg) | |
| 1101 | { | ||
| 1102 | 137 | DS_NEP *dsctx = (DS_NEP*)ds->data; | |
| 1103 | |||
| 1104 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
137 | PetscFunctionBegin; |
| 1105 |
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)); |
| 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(RGDestroy(&dsctx->rg)); |
| 1107 | 137 | dsctx->rg = rg; | |
| 1108 |
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); |
| 1109 | } | ||
| 1110 | |||
| 1111 | /*@ | ||
| 1112 | DSNEPSetRG - Associates a region object to the `DSNEP` solver. | ||
| 1113 | |||
| 1114 | Collective | ||
| 1115 | |||
| 1116 | Input Parameters: | ||
| 1117 | + ds - the direct solver context | ||
| 1118 | - rg - the region context | ||
| 1119 | |||
| 1120 | Notes: | ||
| 1121 | The region is used only in the contour integral method, and | ||
| 1122 | should enclose the wanted eigenvalues. | ||
| 1123 | |||
| 1124 | Level: developer | ||
| 1125 | |||
| 1126 | .seealso: [](sec:ds), `DSNEP`, `DSNEPGetRG()` | ||
| 1127 | @*/ | ||
| 1128 | 137 | PetscErrorCode DSNEPSetRG(DS ds,RG rg) | |
| 1129 | { | ||
| 1130 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
137 | PetscFunctionBegin; |
| 1131 |
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); |
| 1132 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
137 | if (rg) { |
| 1133 |
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); |
| 1134 |
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); |
| 1135 | } | ||
| 1136 |
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)); |
| 1137 |
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); |
| 1138 | } | ||
| 1139 | |||
| 1140 | 20 | static PetscErrorCode DSNEPGetRG_NEP(DS ds,RG *rg) | |
| 1141 | { | ||
| 1142 | 20 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 1143 | |||
| 1144 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 1145 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (!ctx->rg) { |
| 1146 |
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)); |
| 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(PetscObjectIncrementTabLevel((PetscObject)ctx->rg,(PetscObject)ds,1)); |
| 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(RGSetOptionsPrefix(ctx->rg,((PetscObject)ds)->prefix)); |
| 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(RGAppendOptionsPrefix(ctx->rg,"ds_nep_")); |
| 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(PetscObjectSetOptions((PetscObject)ctx->rg,((PetscObject)ds)->options)); |
| 1151 | } | ||
| 1152 | 20 | *rg = ctx->rg; | |
| 1153 |
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); |
| 1154 | } | ||
| 1155 | |||
| 1156 | /*@ | ||
| 1157 | DSNEPGetRG - Obtain the region object associated to the `DSNEP` solver. | ||
| 1158 | |||
| 1159 | Collective | ||
| 1160 | |||
| 1161 | Input Parameter: | ||
| 1162 | . ds - the direct solver context | ||
| 1163 | |||
| 1164 | Output Parameter: | ||
| 1165 | . rg - the region context | ||
| 1166 | |||
| 1167 | Level: developer | ||
| 1168 | |||
| 1169 | .seealso: [](sec:ds), `DSNEP`, `DSNEPSetRG()` | ||
| 1170 | @*/ | ||
| 1171 | 20 | PetscErrorCode DSNEPGetRG(DS ds,RG *rg) | |
| 1172 | { | ||
| 1173 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 1174 |
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); |
| 1175 |
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); |
| 1176 |
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)); |
| 1177 |
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); |
| 1178 | } | ||
| 1179 | |||
| 1180 | 307 | static PetscErrorCode DSSetFromOptions_NEP(DS ds,PetscOptionItems PetscOptionsObject) | |
| 1181 | { | ||
| 1182 | 307 | PetscInt k; | |
| 1183 | 307 | PetscBool flg; | |
| 1184 | #if defined(PETSC_USE_COMPLEX) | ||
| 1185 | 212 | PetscReal r; | |
| 1186 | 212 | PetscBool flg1; | |
| 1187 | 212 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 1188 | #endif | ||
| 1189 | |||
| 1190 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
307 | PetscFunctionBegin; |
| 1191 |
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"); |
| 1192 | |||
| 1193 |
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)); |
| 1194 |
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)); |
| 1195 | |||
| 1196 |
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)); |
| 1197 |
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)); |
| 1198 | |||
| 1199 |
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)); |
| 1200 |
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)); |
| 1201 | |||
| 1202 | #if defined(PETSC_USE_COMPLEX) | ||
| 1203 | 212 | r = ctx->rtol; | |
| 1204 |
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)); |
| 1205 | 212 | k = ctx->Nit; | |
| 1206 |
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)); |
| 1207 |
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)); |
| 1208 | |||
| 1209 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
212 | if (ds->method==1) { |
| 1210 |
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)); |
| 1211 |
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)); |
| 1212 | } | ||
| 1213 | #endif | ||
| 1214 | |||
| 1215 |
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(); |
| 1216 |
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); |
| 1217 | } | ||
| 1218 | |||
| 1219 | 317 | static PetscErrorCode DSDestroy_NEP(DS ds) | |
| 1220 | { | ||
| 1221 | 317 | DS_NEP *ctx = (DS_NEP*)ds->data; | |
| 1222 | 317 | PetscInt i; | |
| 1223 | |||
| 1224 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
317 | PetscFunctionBegin; |
| 1225 |
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])); |
| 1226 |
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)); |
| 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(PetscLayoutDestroy(&ctx->map)); |
| 1228 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 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.
|
317 | if (ctx->computematrixdestroy) PetscCall((*ctx->computematrixdestroy)(&ctx->computematrixctx)); |
| 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 |