| 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 | SLEPc eigensolver: "ciss" | ||
| 12 | |||
| 13 | Method: Contour Integral Spectral Slicing | ||
| 14 | |||
| 15 | Algorithm: | ||
| 16 | |||
| 17 | Contour integral based on Sakurai-Sugiura method to construct a | ||
| 18 | subspace, with various eigenpair extractions (Rayleigh-Ritz, | ||
| 19 | explicit moment). | ||
| 20 | |||
| 21 | Based on code contributed by Y. Maeda, T. Sakurai. | ||
| 22 | |||
| 23 | References: | ||
| 24 | |||
| 25 | [1] J. Asakura, T. Sakurai, H. Tadano, T. Ikegami, K. Kimura, "A | ||
| 26 | numerical method for nonlinear eigenvalue problems using contour | ||
| 27 | integrals", JSIAM Lett. 1:52-55, 2009. | ||
| 28 | |||
| 29 | [2] S. Yokota and T. Sakurai, "A projection method for nonlinear | ||
| 30 | eigenvalue problems using contour integrals", JSIAM Lett. | ||
| 31 | 5:41-44, 2013. | ||
| 32 | */ | ||
| 33 | |||
| 34 | #include <slepc/private/nepimpl.h> /*I "slepcnep.h" I*/ | ||
| 35 | #include <slepc/private/slepccontour.h> | ||
| 36 | |||
| 37 | typedef struct _n_nep_ciss_project *NEP_CISS_PROJECT; | ||
| 38 | typedef struct { | ||
| 39 | /* parameters */ | ||
| 40 | PetscInt N; /* number of integration points (32) */ | ||
| 41 | PetscInt L; /* block size (16) */ | ||
| 42 | PetscInt M; /* moment degree (N/4 = 4) */ | ||
| 43 | PetscReal delta; /* threshold of singular value (1e-12) */ | ||
| 44 | PetscInt L_max; /* maximum number of columns of the source matrix V */ | ||
| 45 | PetscReal spurious_threshold; /* discard spurious eigenpairs */ | ||
| 46 | PetscBool isreal; /* T(z) is real for real z */ | ||
| 47 | PetscInt npart; /* number of partitions */ | ||
| 48 | PetscInt refine_inner; | ||
| 49 | PetscInt refine_blocksize; | ||
| 50 | NEPCISSExtraction extraction; | ||
| 51 | /* private data */ | ||
| 52 | SlepcContourData contour; | ||
| 53 | PetscReal *sigma; /* threshold for numerical rank */ | ||
| 54 | PetscScalar *weight; | ||
| 55 | PetscScalar *omega; | ||
| 56 | PetscScalar *pp; | ||
| 57 | BV V; | ||
| 58 | BV S; | ||
| 59 | BV Y; | ||
| 60 | PetscBool useconj; | ||
| 61 | Mat J; /* auxiliary matrix when using subcomm */ | ||
| 62 | BV pV; | ||
| 63 | NEP_CISS_PROJECT dsctxf; | ||
| 64 | PetscObjectId rgid; | ||
| 65 | PetscObjectState rgstate; | ||
| 66 | } NEP_CISS; | ||
| 67 | |||
| 68 | struct _n_nep_ciss_project { | ||
| 69 | NEP nep; | ||
| 70 | BV Q; | ||
| 71 | }; | ||
| 72 | |||
| 73 | 2040 | static PetscErrorCode NEPContourDSComputeMatrix(DS ds,PetscScalar lambda,PetscBool deriv,DSMatType mat,void *ctx) | |
| 74 | { | ||
| 75 | 2040 | NEP_CISS_PROJECT proj = (NEP_CISS_PROJECT)ctx; | |
| 76 | 2040 | Mat M,fun; | |
| 77 | |||
| 78 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
2040 | PetscFunctionBegin; |
| 79 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
2040 | if (!deriv) { |
| 80 |
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.
|
2040 | PetscCall(NEPComputeFunction(proj->nep,lambda,proj->nep->function,proj->nep->function)); |
| 81 | 2040 | fun = proj->nep->function; | |
| 82 | } else { | ||
| 83 | ✗ | PetscCall(NEPComputeJacobian(proj->nep,lambda,proj->nep->jacobian)); | |
| 84 | ✗ | fun = proj->nep->jacobian; | |
| 85 | } | ||
| 86 |
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.
|
2040 | PetscCall(DSGetMat(ds,mat,&M)); |
| 87 |
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.
|
2040 | PetscCall(BVMatProject(proj->Q,fun,proj->Q,M)); |
| 88 |
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.
|
2040 | PetscCall(DSRestoreMat(ds,mat,&M)); |
| 89 |
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.
|
408 | PetscFunctionReturn(PETSC_SUCCESS); |
| 90 | } | ||
| 91 | |||
| 92 | 1120 | static PetscErrorCode NEPComputeFunctionSubcomm(NEP nep,PetscScalar lambda,Mat T,Mat P,PetscBool deriv) | |
| 93 | { | ||
| 94 | 1120 | PetscInt i; | |
| 95 | 1120 | PetscScalar alpha; | |
| 96 | 1120 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 97 | |||
| 98 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1120 | PetscFunctionBegin; |
| 99 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1120 | PetscAssert(nep->fui!=NEP_USER_INTERFACE_CALLBACK,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_WRONGSTATE,"Should not arrive here with callbacks"); |
| 100 |
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.
|
1120 | PetscCall(MatZeroEntries(T)); |
| 101 |
5/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 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.
|
1120 | if (!deriv && T != P) PetscCall(MatZeroEntries(P)); |
| 102 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4160 | for (i=0;i<nep->nt;i++) { |
| 103 |
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.
|
3040 | if (!deriv) PetscCall(FNEvaluateFunction(nep->f[i],lambda,&alpha)); |
| 104 |
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.
|
1520 | else PetscCall(FNEvaluateDerivative(nep->f[i],lambda,&alpha)); |
| 105 |
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.
|
3040 | PetscCall(MatAXPY(T,alpha,ctx->contour->pA[i],nep->mstr)); |
| 106 |
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.
|
3040 | if (!deriv && T != P) PetscCall(MatAXPY(P,alpha,ctx->contour->pP[i],nep->mstrp)); |
| 107 | } | ||
| 108 |
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.
|
224 | PetscFunctionReturn(PETSC_SUCCESS); |
| 109 | } | ||
| 110 | |||
| 111 | /* | ||
| 112 | Set up KSP solvers for every integration point | ||
| 113 | */ | ||
| 114 | 197 | static PetscErrorCode NEPCISSSetUp(NEP nep,Mat T,Mat P) | |
| 115 | { | ||
| 116 | 197 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 117 | 197 | SlepcContourData contour; | |
| 118 | 197 | PetscInt i,p_id; | |
| 119 | 197 | Mat Amat,Pmat; | |
| 120 | |||
| 121 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
197 | PetscFunctionBegin; |
| 122 |
2/10✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
197 | if (!ctx->contour || !ctx->contour->ksp) PetscCall(NEPCISSGetKSPs(nep,NULL,NULL)); |
| 123 | 197 | contour = ctx->contour; | |
| 124 |
2/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
197 | PetscAssert(ctx->contour && ctx->contour->ksp,PetscObjectComm((PetscObject)nep),PETSC_ERR_PLIB,"Something went wrong with NEPCISSGetKSPs()"); |
| 125 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4101 | for (i=0;i<contour->npoints;i++) { |
| 126 | 3904 | p_id = i*contour->subcomm->n + contour->subcomm->color; | |
| 127 |
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.
|
3904 | PetscCall(MatDuplicate(T,MAT_DO_NOT_COPY_VALUES,&Amat)); |
| 128 |
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.
|
3904 | if (T != P) PetscCall(MatDuplicate(P,MAT_DO_NOT_COPY_VALUES,&Pmat)); else Pmat = Amat; |
| 129 |
8/10✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ 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.
|
3904 | if (contour->subcomm->n == 1 || nep->fui==NEP_USER_INTERFACE_CALLBACK) PetscCall(NEPComputeFunction(nep,ctx->omega[p_id],Amat,Pmat)); |
| 130 |
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.
|
560 | else PetscCall(NEPComputeFunctionSubcomm(nep,ctx->omega[p_id],Amat,Pmat,PETSC_FALSE)); |
| 131 |
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.
|
3904 | PetscCall(NEP_KSPSetOperators(contour->ksp[i],Amat,Pmat)); |
| 132 |
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.
|
3904 | PetscCall(MatDestroy(&Amat)); |
| 133 |
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.
|
3904 | if (T != P) PetscCall(MatDestroy(&Pmat)); |
| 134 | } | ||
| 135 |
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.
|
40 | PetscFunctionReturn(PETSC_SUCCESS); |
| 136 | } | ||
| 137 | |||
| 138 | /* | ||
| 139 | Y_i = F(z_i)^{-1}Fp(z_i)V for every integration point, Y=[Y_i] is in the context | ||
| 140 | */ | ||
| 141 | 203 | static PetscErrorCode NEPCISSSolve(NEP nep,Mat dT,BV V,PetscInt L_start,PetscInt L_end) | |
| 142 | { | ||
| 143 | 203 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 144 | 203 | SlepcContourData contour = ctx->contour; | |
| 145 | 203 | PetscInt i,p_id; | |
| 146 | 203 | Mat MV,BMV=NULL,MC; | |
| 147 | |||
| 148 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
203 | PetscFunctionBegin; |
| 149 |
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.
|
203 | PetscCall(BVSetActiveColumns(V,L_start,L_end)); |
| 150 |
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.
|
203 | PetscCall(BVGetMat(V,&MV)); |
| 151 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4299 | for (i=0;i<contour->npoints;i++) { |
| 152 | 4096 | p_id = i*contour->subcomm->n + contour->subcomm->color; | |
| 153 |
8/10✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ 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.
|
4096 | if (contour->subcomm->n==1 || nep->fui==NEP_USER_INTERFACE_CALLBACK) PetscCall(NEPComputeJacobian(nep,ctx->omega[p_id],dT)); |
| 154 |
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.
|
560 | else PetscCall(NEPComputeFunctionSubcomm(nep,ctx->omega[p_id],dT,NULL,PETSC_TRUE)); |
| 155 |
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.
|
4096 | PetscCall(BVSetActiveColumns(ctx->Y,i*ctx->L+L_start,i*ctx->L+L_end)); |
| 156 |
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.
|
4096 | PetscCall(BVGetMat(ctx->Y,&MC)); |
| 157 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4096 | if (!i) { |
| 158 |
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.
|
203 | PetscCall(MatProductCreate(dT,MV,NULL,&BMV)); |
| 159 |
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.
|
203 | PetscCall(MatProductSetType(BMV,MATPRODUCT_AB)); |
| 160 |
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.
|
203 | PetscCall(MatProductSetFromOptions(BMV)); |
| 161 |
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.
|
203 | PetscCall(MatProductSymbolic(BMV)); |
| 162 | } | ||
| 163 |
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.
|
4096 | PetscCall(MatProductNumeric(BMV)); |
| 164 |
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.
|
4096 | PetscCall(KSPMatSolve(contour->ksp[i],BMV,MC)); |
| 165 |
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.
|
4096 | PetscCall(BVRestoreMat(ctx->Y,&MC)); |
| 166 | } | ||
| 167 |
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.
|
203 | PetscCall(MatDestroy(&BMV)); |
| 168 |
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.
|
203 | PetscCall(BVRestoreMat(V,&MV)); |
| 169 |
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.
|
41 | PetscFunctionReturn(PETSC_SUCCESS); |
| 170 | } | ||
| 171 | |||
| 172 | 197 | static PetscErrorCode NEPSetUp_CISS(NEP nep) | |
| 173 | { | ||
| 174 | 197 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 175 | 197 | SlepcContourData contour; | |
| 176 | 197 | PetscInt nwork; | |
| 177 | 197 | PetscBool istrivial,isellipse,flg; | |
| 178 | 197 | NEP_CISS_PROJECT dsctxf; | |
| 179 | 197 | PetscObjectId id; | |
| 180 | 197 | PetscObjectState state; | |
| 181 | 197 | Vec v0; | |
| 182 | |||
| 183 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
197 | PetscFunctionBegin; |
| 184 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (nep->ncv==PETSC_DETERMINE) nep->ncv = ctx->L_max*ctx->M; |
| 185 | else { | ||
| 186 | 90 | ctx->L_max = nep->ncv/ctx->M; | |
| 187 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
90 | if (!ctx->L_max) { |
| 188 | ✗ | ctx->L_max = 1; | |
| 189 | ✗ | nep->ncv = ctx->L_max*ctx->M; | |
| 190 | } | ||
| 191 | } | ||
| 192 | 197 | ctx->L = PetscMin(ctx->L,ctx->L_max); | |
| 193 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (nep->max_it==PETSC_DETERMINE) nep->max_it = 5; |
| 194 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (nep->mpd==PETSC_DETERMINE) nep->mpd = nep->ncv; |
| 195 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (!nep->which) nep->which = NEP_ALL; |
| 196 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
197 | PetscCheck(nep->which==NEP_ALL,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"This solver supports only computing all eigenvalues"); |
| 197 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
197 | NEPCheckUnsupported(nep,NEP_FEATURE_STOPPING | NEP_FEATURE_TWOSIDED); |
| 198 | |||
| 199 | /* check region */ | ||
| 200 |
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.
|
197 | PetscCall(RGIsTrivial(nep->rg,&istrivial)); |
| 201 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
197 | PetscCheck(!istrivial,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"CISS requires a nontrivial region, e.g. -rg_type ellipse ..."); |
| 202 |
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.
|
197 | PetscCall(RGGetComplement(nep->rg,&flg)); |
| 203 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
197 | PetscCheck(!flg,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"A region with complement flag set is not allowed"); |
| 204 |
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.
|
197 | PetscCall(PetscObjectTypeCompare((PetscObject)nep->rg,RGELLIPSE,&isellipse)); |
| 205 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
197 | PetscCheck(isellipse,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"Currently only implemented for elliptic regions"); |
| 206 | |||
| 207 | /* if the region has changed, then reset contour data */ | ||
| 208 |
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.
|
197 | PetscCall(PetscObjectGetId((PetscObject)nep->rg,&id)); |
| 209 |
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.
|
197 | PetscCall(PetscObjectStateGet((PetscObject)nep->rg,&state)); |
| 210 |
1/6✗ 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.
|
197 | if (ctx->rgid && (id != ctx->rgid || state != ctx->rgstate)) { |
| 211 | ✗ | PetscCall(SlepcContourDataDestroy(&ctx->contour)); | |
| 212 | ✗ | PetscCall(PetscInfo(nep,"Resetting the contour data structure due to a change of region\n")); | |
| 213 | ✗ | ctx->rgid = id; ctx->rgstate = state; | |
| 214 | } | ||
| 215 | |||
| 216 | /* create contour data structure */ | ||
| 217 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
197 | if (!ctx->contour) { |
| 218 | ✗ | PetscCall(RGCanUseConjugates(nep->rg,ctx->isreal,&ctx->useconj)); | |
| 219 | ✗ | PetscCall(SlepcContourDataCreate(ctx->useconj?ctx->N/2:ctx->N,ctx->npart,(PetscObject)nep,&ctx->contour)); | |
| 220 | } | ||
| 221 | |||
| 222 |
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.
|
197 | PetscCall(NEPAllocateSolution(nep,0)); |
| 223 |
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.
|
197 | if (ctx->weight) PetscCall(PetscFree4(ctx->weight,ctx->omega,ctx->pp,ctx->sigma)); |
| 224 |
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.
|
197 | PetscCall(PetscMalloc4(ctx->N,&ctx->weight,ctx->N,&ctx->omega,ctx->N,&ctx->pp,ctx->L_max*ctx->M,&ctx->sigma)); |
| 225 | |||
| 226 | /* allocate basis vectors */ | ||
| 227 |
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.
|
197 | PetscCall(BVDestroy(&ctx->S)); |
| 228 |
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.
|
197 | PetscCall(BVDuplicateResize(nep->V,ctx->L*ctx->M,&ctx->S)); |
| 229 |
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.
|
197 | PetscCall(BVDestroy(&ctx->V)); |
| 230 |
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.
|
197 | PetscCall(BVDuplicateResize(nep->V,ctx->L,&ctx->V)); |
| 231 | |||
| 232 | 197 | contour = ctx->contour; | |
| 233 |
5/6✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 5 times.
|
197 | if (contour->subcomm && contour->subcomm->n != 1 && nep->fui==NEP_USER_INTERFACE_CALLBACK) { |
| 234 |
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.
|
30 | PetscCall(NEPComputeFunction(nep,0,nep->function,nep->function_pre)); |
| 235 |
6/8✓ 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 1 times.
|
30 | PetscCall(SlepcContourRedundantMat(contour,1,&nep->function,(nep->function!=nep->function_pre)?&nep->function_pre:NULL)); |
| 236 |
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.
|
167 | } else PetscCall(SlepcContourRedundantMat(contour,nep->nt,nep->A,nep->P)); |
| 237 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (contour->pA) { |
| 238 |
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.
|
90 | if (!ctx->J) PetscCall(MatDuplicate(contour->pA[0],MAT_DO_NOT_COPY_VALUES,&ctx->J)); |
| 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.
|
90 | PetscCall(BVGetColumn(ctx->V,0,&v0)); |
| 240 |
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.
|
90 | PetscCall(SlepcContourScatterCreate(contour,v0)); |
| 241 |
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.
|
90 | PetscCall(BVRestoreColumn(ctx->V,0,&v0)); |
| 242 |
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.
|
90 | PetscCall(BVDestroy(&ctx->pV)); |
| 243 |
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.
|
90 | PetscCall(BVCreate(PetscObjectComm((PetscObject)contour->xsub),&ctx->pV)); |
| 244 |
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.
|
90 | PetscCall(BVSetSizesFromVec(ctx->pV,contour->xsub,nep->n)); |
| 245 |
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.
|
90 | PetscCall(BVSetFromOptions(ctx->pV)); |
| 246 |
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.
|
90 | PetscCall(BVResize(ctx->pV,ctx->L,PETSC_FALSE)); |
| 247 | } | ||
| 248 | |||
| 249 |
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.
|
197 | PetscCall(BVDestroy(&ctx->Y)); |
| 250 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (contour->pA) { |
| 251 |
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.
|
90 | PetscCall(BVCreate(PetscObjectComm((PetscObject)contour->xsub),&ctx->Y)); |
| 252 |
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.
|
90 | PetscCall(BVSetSizesFromVec(ctx->Y,contour->xsub,nep->n)); |
| 253 |
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.
|
90 | PetscCall(BVSetFromOptions(ctx->Y)); |
| 254 |
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.
|
90 | PetscCall(BVResize(ctx->Y,contour->npoints*ctx->L,PETSC_FALSE)); |
| 255 |
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.
|
107 | } else PetscCall(BVDuplicateResize(nep->V,contour->npoints*ctx->L,&ctx->Y)); |
| 256 | |||
| 257 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (ctx->extraction == NEP_CISS_EXTRACTION_RITZ) { |
| 258 |
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.
|
117 | PetscCall(DSSetMethod(nep->ds,1)); |
| 259 |
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.
|
117 | PetscCall(DSNEPSetRG(nep->ds,nep->rg)); |
| 260 |
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.
|
117 | if (nep->fui==NEP_USER_INTERFACE_SPLIT) PetscCall(DSNEPSetFN(nep->ds,nep->nt,nep->f)); |
| 261 | else { | ||
| 262 |
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.
|
30 | PetscCall(PetscNew(&dsctxf)); |
| 263 |
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.
|
30 | PetscCall(DSNEPSetComputeMatrixFunction(nep->ds,NEPContourDSComputeMatrix,dsctxf)); |
| 264 | 30 | dsctxf->nep = nep; | |
| 265 | 30 | ctx->dsctxf = dsctxf; | |
| 266 | } | ||
| 267 | } | ||
| 268 |
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.
|
197 | PetscCall(DSAllocate(nep->ds,nep->ncv)); |
| 269 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | nwork = (nep->fui==NEP_USER_INTERFACE_SPLIT)? 2: 1; |
| 270 |
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.
|
197 | PetscCall(NEPSetWorkVecs(nep,nwork)); |
| 271 |
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.
|
40 | PetscFunctionReturn(PETSC_SUCCESS); |
| 272 | } | ||
| 273 | |||
| 274 | 197 | static PetscErrorCode NEPSolve_CISS(NEP nep) | |
| 275 | { | ||
| 276 | 197 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 277 | 197 | SlepcContourData contour = ctx->contour; | |
| 278 | 197 | Mat X,M,E,T,P,J; | |
| 279 | 197 | BV V; | |
| 280 | 197 | PetscInt i,j,ld,L_add=0,nv=0,L_base=ctx->L,inner,*inside; | |
| 281 | 197 | PetscScalar *Mu,*H0,*H1,*rr,*temp,center; | |
| 282 | 197 | PetscReal error,max_error,radius,rgscale,est_eig,eta; | |
| 283 | 197 | PetscBool isellipse,*fl1; | |
| 284 | 197 | Vec si; | |
| 285 | 197 | SlepcSC sc; | |
| 286 | 197 | PetscRandom rand; | |
| 287 | |||
| 288 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
197 | PetscFunctionBegin; |
| 289 |
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.
|
197 | PetscCall(DSGetSlepcSC(nep->ds,&sc)); |
| 290 | 197 | sc->comparison = SlepcCompareLargestMagnitude; | |
| 291 | 197 | sc->comparisonctx = NULL; | |
| 292 | 197 | sc->map = NULL; | |
| 293 | 197 | sc->mapobj = NULL; | |
| 294 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
197 | PetscCall(DSGetLeadingDimension(nep->ds,&ld)); |
| 295 |
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.
|
197 | PetscCall(RGComputeQuadrature(nep->rg,RG_QUADRULE_TRAPEZOIDAL,ctx->N,ctx->omega,ctx->pp,ctx->weight)); |
| 296 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (contour->pA) { |
| 297 | 90 | T = contour->pA[0]; | |
| 298 |
7/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 5 times.
|
90 | P = ((nep->fui==NEP_USER_INTERFACE_SPLIT && nep->P) || (nep->fui==NEP_USER_INTERFACE_CALLBACK && contour->pP))? contour->pP[0]: T; |
| 299 | } else { | ||
| 300 | 107 | T = nep->function; | |
| 301 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
107 | P = nep->function_pre? nep->function_pre: nep->function; |
| 302 | } | ||
| 303 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
197 | PetscCall(NEPCISSSetUp(nep,T,P)); |
| 304 |
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.
|
197 | PetscCall(BVSetActiveColumns(ctx->V,0,ctx->L)); |
| 305 |
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.
|
197 | PetscCall(BVSetRandomSign(ctx->V)); |
| 306 |
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.
|
197 | PetscCall(BVGetRandomContext(ctx->V,&rand)); |
| 307 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (contour->pA) { |
| 308 | 90 | J = ctx->J; | |
| 309 | 90 | V = ctx->pV; | |
| 310 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
90 | PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); |
| 311 | } else { | ||
| 312 | 107 | J = nep->jacobian; | |
| 313 | 107 | V = ctx->V; | |
| 314 | } | ||
| 315 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
197 | PetscCall(NEPCISSSolve(nep,J,V,0,ctx->L)); |
| 316 |
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.
|
197 | PetscCall(PetscObjectTypeCompare((PetscObject)nep->rg,RGELLIPSE,&isellipse)); |
| 317 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
197 | if (isellipse) { |
| 318 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
197 | PetscCall(BVTraceQuadrature(ctx->Y,ctx->V,ctx->L,ctx->L,ctx->weight,contour->scatterin,contour->subcomm,contour->npoints,ctx->useconj,&est_eig)); |
| 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.
|
197 | PetscCall(PetscInfo(nep,"Estimated eigenvalue count: %f\n",(double)est_eig)); |
| 320 | 197 | eta = PetscPowReal(10.0,-PetscLog10Real(nep->tol)/ctx->N); | |
| 321 | 197 | L_add = PetscMax(0,(PetscInt)PetscCeilReal((est_eig*eta)/ctx->M)-ctx->L); | |
| 322 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
197 | if (L_add>ctx->L_max-ctx->L) { |
| 323 | ✗ | PetscCall(PetscInfo(nep,"Number of eigenvalues inside the contour path may be too large\n")); | |
| 324 | ✗ | L_add = ctx->L_max-ctx->L; | |
| 325 | } | ||
| 326 | } | ||
| 327 | /* Updates L after estimate the number of eigenvalue */ | ||
| 328 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | if (L_add>0) { |
| 329 |
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.
|
5 | PetscCall(PetscInfo(nep,"Changing L %" PetscInt_FMT " -> %" PetscInt_FMT " by Estimate #Eig\n",ctx->L,ctx->L+L_add)); |
| 330 |
6/8✓ 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 1 times.
|
5 | PetscCall(BVCISSResizeBases(ctx->S,contour->pA?ctx->pV:ctx->V,ctx->Y,ctx->L,ctx->L+L_add,ctx->M,contour->npoints)); |
| 331 |
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.
|
5 | PetscCall(BVSetActiveColumns(ctx->V,ctx->L,ctx->L+L_add)); |
| 332 |
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.
|
5 | PetscCall(BVSetRandomSign(ctx->V)); |
| 333 |
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.
|
5 | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); |
| 334 | 5 | ctx->L += L_add; | |
| 335 |
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.
|
5 | PetscCall(NEPCISSSolve(nep,J,V,ctx->L-L_add,ctx->L)); |
| 336 | } | ||
| 337 | |||
| 338 |
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.
|
197 | PetscCall(PetscMalloc2(ctx->L*ctx->L*ctx->M*2,&Mu,ctx->L*ctx->M*ctx->L*ctx->M,&H0)); |
| 339 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
197 | for (i=0;i<ctx->refine_blocksize;i++) { |
| 340 |
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(BVDotQuadrature(ctx->Y,V,Mu,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->subcomm,contour->npoints,ctx->useconj)); |
| 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.
|
15 | PetscCall(CISS_BlockHankel(Mu,0,ctx->L,ctx->M,H0)); |
| 342 |
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(PetscLogEventBegin(NEP_CISS_SVD,nep,0,0,0)); |
| 343 |
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(SlepcCISS_BH_SVD(H0,ctx->L*ctx->M,ctx->delta,ctx->sigma,&nv)); |
| 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.
|
15 | PetscCall(PetscLogEventEnd(NEP_CISS_SVD,nep,0,0,0)); |
| 345 |
2/6✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
15 | if (ctx->sigma[0]<=ctx->delta || nv < ctx->L*ctx->M || ctx->L == ctx->L_max) break; |
| 346 | ✗ | L_add = L_base; | |
| 347 | ✗ | if (ctx->L+L_add>ctx->L_max) L_add = ctx->L_max-ctx->L; | |
| 348 | ✗ | PetscCall(PetscInfo(nep,"Changing L %" PetscInt_FMT " -> %" PetscInt_FMT " by SVD(H0)\n",ctx->L,ctx->L+L_add)); | |
| 349 | ✗ | PetscCall(BVCISSResizeBases(ctx->S,contour->pA?ctx->pV:ctx->V,ctx->Y,ctx->L,ctx->L+L_add,ctx->M,contour->npoints)); | |
| 350 | ✗ | PetscCall(BVSetActiveColumns(ctx->V,ctx->L,ctx->L+L_add)); | |
| 351 | ✗ | PetscCall(BVSetRandomSign(ctx->V)); | |
| 352 | ✗ | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); | |
| 353 | ✗ | ctx->L += L_add; | |
| 354 | ✗ | PetscCall(NEPCISSSolve(nep,J,V,ctx->L-L_add,ctx->L)); | |
| 355 | ✗ | if (L_add) { | |
| 356 | ✗ | PetscCall(PetscFree2(Mu,H0)); | |
| 357 | ✗ | PetscCall(PetscMalloc2(ctx->L*ctx->L*ctx->M*2,&Mu,ctx->L*ctx->M*ctx->L*ctx->M,&H0)); | |
| 358 | } | ||
| 359 | } | ||
| 360 | |||
| 361 |
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.
|
197 | PetscCall(RGGetScale(nep->rg,&rgscale)); |
| 362 |
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.
|
197 | PetscCall(RGEllipseGetParameters(nep->rg,¢er,&radius,NULL)); |
| 363 | |||
| 364 |
5/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 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.
|
197 | if (ctx->extraction == NEP_CISS_EXTRACTION_HANKEL) PetscCall(PetscMalloc1(ctx->L*ctx->M*ctx->L*ctx->M,&H1)); |
| 365 | |||
| 366 | 395 | while (nep->reason == NEP_CONVERGED_ITERATING) { | |
| 367 | 198 | nep->its++; | |
| 368 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
198 | for (inner=0;inner<=ctx->refine_inner;inner++) { |
| 369 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
198 | if (ctx->extraction == NEP_CISS_EXTRACTION_HANKEL) { |
| 370 |
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.
|
40 | PetscCall(BVDotQuadrature(ctx->Y,V,Mu,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->subcomm,contour->npoints,ctx->useconj)); |
| 371 |
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.
|
40 | PetscCall(CISS_BlockHankel(Mu,0,ctx->L,ctx->M,H0)); |
| 372 |
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.
|
40 | PetscCall(PetscLogEventBegin(NEP_CISS_SVD,nep,0,0,0)); |
| 373 |
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.
|
40 | PetscCall(SlepcCISS_BH_SVD(H0,ctx->L*ctx->M,ctx->delta,ctx->sigma,&nv)); |
| 374 |
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.
|
40 | PetscCall(PetscLogEventEnd(NEP_CISS_SVD,nep,0,0,0)); |
| 375 | } else { | ||
| 376 |
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.
|
158 | PetscCall(BVSumQuadrature(ctx->S,ctx->Y,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->scatterin,contour->subcomm,contour->npoints,ctx->useconj)); |
| 377 | /* compute SVD of S */ | ||
| 378 |
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.
|
276 | PetscCall(BVSVDAndRank(ctx->S,ctx->M,ctx->L,ctx->delta,(ctx->extraction==NEP_CISS_EXTRACTION_CAA)?BV_SVD_METHOD_QR_CAA:BV_SVD_METHOD_QR,H0,ctx->sigma,&nv)); |
| 379 | } | ||
| 380 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
198 | PetscCall(PetscInfo(nep,"Estimated rank: nv = %" PetscInt_FMT "\n",nv)); |
| 381 |
2/6✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
198 | if (ctx->sigma[0]>ctx->delta && nv==ctx->L*ctx->M && inner!=ctx->refine_inner) { |
| 382 | ✗ | PetscCall(BVSumQuadrature(ctx->S,ctx->Y,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->scatterin,contour->subcomm,contour->npoints,ctx->useconj)); | |
| 383 | ✗ | PetscCall(BVSetActiveColumns(ctx->S,0,ctx->L)); | |
| 384 | ✗ | PetscCall(BVSetActiveColumns(ctx->V,0,ctx->L)); | |
| 385 | ✗ | PetscCall(BVCopy(ctx->S,ctx->V)); | |
| 386 | ✗ | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); | |
| 387 | ✗ | PetscCall(NEPCISSSolve(nep,J,V,0,ctx->L)); | |
| 388 | } else break; | ||
| 389 | } | ||
| 390 | 198 | nep->nconv = 0; | |
| 391 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
198 | if (nv == 0) { nep->reason = NEP_CONVERGED_TOL; break; } |
| 392 | else { | ||
| 393 | /* Extracting eigenpairs */ | ||
| 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.
|
198 | PetscCall(DSSetDimensions(nep->ds,nv,0,0)); |
| 395 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
198 | PetscCall(DSSetState(nep->ds,DS_STATE_RAW)); |
| 396 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
198 | if (ctx->extraction == NEP_CISS_EXTRACTION_HANKEL) { |
| 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.
|
40 | PetscCall(CISS_BlockHankel(Mu,0,ctx->L,ctx->M,H0)); |
| 398 |
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.
|
40 | PetscCall(CISS_BlockHankel(Mu,1,ctx->L,ctx->M,H1)); |
| 399 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
40 | PetscCall(DSGetArray(nep->ds,DS_MAT_A,&temp)); |
| 400 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
255 | for (j=0;j<nv;j++) |
| 401 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1450 | for (i=0;i<nv;i++) |
| 402 | 1235 | temp[i+j*ld] = H1[i+j*ctx->L*ctx->M]; | |
| 403 |
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.
|
40 | PetscCall(DSRestoreArray(nep->ds,DS_MAT_A,&temp)); |
| 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.
|
40 | PetscCall(DSGetArray(nep->ds,DS_MAT_B,&temp)); |
| 405 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
255 | for (j=0;j<nv;j++) |
| 406 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1450 | for (i=0;i<nv;i++) |
| 407 | 1235 | temp[i+j*ld] = H0[i+j*ctx->L*ctx->M]; | |
| 408 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
40 | PetscCall(DSRestoreArray(nep->ds,DS_MAT_B,&temp)); |
| 409 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
158 | } else if (ctx->extraction == NEP_CISS_EXTRACTION_CAA) { |
| 410 |
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.
|
40 | PetscCall(BVSetActiveColumns(ctx->S,0,nv)); |
| 411 |
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.
|
40 | PetscCall(DSGetArray(nep->ds,DS_MAT_A,&temp)); |
| 412 |
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.
|
250 | for (i=0;i<nv;i++) PetscCall(PetscArraycpy(temp+i*ld,H0+i*nv,nv)); |
| 413 |
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.
|
40 | PetscCall(DSRestoreArray(nep->ds,DS_MAT_A,&temp)); |
| 414 | } else { | ||
| 415 |
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.
|
118 | PetscCall(BVSetActiveColumns(ctx->S,0,nv)); |
| 416 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
118 | if (nep->fui==NEP_USER_INTERFACE_SPLIT) { |
| 417 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
328 | for (i=0;i<nep->nt;i++) { |
| 418 |
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.
|
240 | PetscCall(DSGetMat(nep->ds,DSMatExtra[i],&E)); |
| 419 |
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.
|
240 | PetscCall(BVMatProject(ctx->S,nep->A[i],ctx->S,E)); |
| 420 |
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.
|
240 | PetscCall(DSRestoreMat(nep->ds,DSMatExtra[i],&E)); |
| 421 | } | ||
| 422 | 30 | } else { ctx->dsctxf->Q = ctx->S; } | |
| 423 | } | ||
| 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.
|
198 | PetscCall(DSSolve(nep->ds,nep->eigr,nep->eigi)); |
| 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.
|
198 | PetscCall(DSSynchronize(nep->ds,nep->eigr,nep->eigi)); |
| 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.
|
198 | PetscCall(DSGetDimensions(nep->ds,NULL,NULL,NULL,&nv)); |
| 427 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
198 | if (ctx->extraction == NEP_CISS_EXTRACTION_CAA || ctx->extraction == NEP_CISS_EXTRACTION_HANKEL) { |
| 428 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
505 | for (i=0;i<nv;i++) { |
| 429 | 425 | nep->eigr[i] = (nep->eigr[i]*radius+center)*rgscale; | |
| 430 | } | ||
| 431 | } | ||
| 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.
|
198 | PetscCall(PetscMalloc3(nv,&fl1,nv,&inside,nv,&rr)); |
| 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.
|
198 | PetscCall(DSVectors(nep->ds,DS_MAT_X,NULL,NULL)); |
| 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.
|
198 | PetscCall(DSGetMat(nep->ds,DS_MAT_X,&X)); |
| 435 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
198 | PetscCall(SlepcCISS_isGhost(X,nv,ctx->sigma,ctx->spurious_threshold,fl1)); |
| 436 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
198 | PetscCall(DSRestoreMat(nep->ds,DS_MAT_X,&X)); |
| 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.
|
198 | PetscCall(RGCheckInside(nep->rg,nv,nep->eigr,nep->eigi,inside)); |
| 438 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1140 | for (i=0;i<nv;i++) { |
| 439 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
942 | if (fl1[i] && inside[i]>=0) { |
| 440 | 837 | rr[i] = 1.0; | |
| 441 | 837 | nep->nconv++; | |
| 442 | 105 | } else rr[i] = 0.0; | |
| 443 | } | ||
| 444 |
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.
|
198 | PetscCall(DSSort(nep->ds,nep->eigr,nep->eigi,rr,NULL,&nep->nconv)); |
| 445 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
198 | PetscCall(DSSynchronize(nep->ds,nep->eigr,nep->eigi)); |
| 446 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
198 | if (ctx->extraction == NEP_CISS_EXTRACTION_CAA || ctx->extraction == NEP_CISS_EXTRACTION_HANKEL) { |
| 447 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
505 | for (i=0;i<nv;i++) nep->eigr[i] = (nep->eigr[i]*radius+center)*rgscale; |
| 448 | } | ||
| 449 |
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.
|
198 | PetscCall(PetscFree3(fl1,inside,rr)); |
| 450 |
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.
|
198 | PetscCall(BVSetActiveColumns(nep->V,0,nv)); |
| 451 |
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.
|
198 | PetscCall(DSVectors(nep->ds,DS_MAT_X,NULL,NULL)); |
| 452 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
198 | if (ctx->extraction == NEP_CISS_EXTRACTION_HANKEL) { |
| 453 |
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.
|
40 | PetscCall(BVSumQuadrature(ctx->S,ctx->Y,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->scatterin,contour->subcomm,contour->npoints,ctx->useconj)); |
| 454 |
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.
|
40 | PetscCall(BVSetActiveColumns(ctx->S,0,nv)); |
| 455 |
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.
|
40 | PetscCall(BVCopy(ctx->S,nep->V)); |
| 456 |
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.
|
40 | PetscCall(DSGetMat(nep->ds,DS_MAT_X,&X)); |
| 457 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
40 | PetscCall(BVMultInPlace(ctx->S,X,0,nep->nconv)); |
| 458 |
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.
|
40 | PetscCall(BVMultInPlace(nep->V,X,0,nep->nconv)); |
| 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.
|
40 | PetscCall(DSRestoreMat(nep->ds,DS_MAT_X,&X)); |
| 460 | } else { | ||
| 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.
|
158 | PetscCall(DSGetMat(nep->ds,DS_MAT_X,&X)); |
| 462 |
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.
|
158 | PetscCall(BVMultInPlace(ctx->S,X,0,nep->nconv)); |
| 463 |
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.
|
158 | PetscCall(DSRestoreMat(nep->ds,DS_MAT_X,&X)); |
| 464 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
158 | PetscCall(BVSetActiveColumns(ctx->S,0,nep->nconv)); |
| 465 |
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.
|
158 | PetscCall(BVCopy(ctx->S,nep->V)); |
| 466 | } | ||
| 467 | max_error = 0.0; | ||
| 468 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1035 | for (i=0;i<nep->nconv;i++) { |
| 469 |
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.
|
837 | PetscCall(BVGetColumn(nep->V,i,&si)); |
| 470 |
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.
|
837 | PetscCall(VecNormalize(si,NULL)); |
| 471 |
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.
|
837 | PetscCall(NEPComputeResidualNorm_Private(nep,PETSC_FALSE,nep->eigr[i],si,nep->work,&error)); |
| 472 |
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.
|
837 | PetscCall((*nep->converged)(nep,nep->eigr[i],0,error,&error,nep->convergedctx)); |
| 473 |
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.
|
837 | PetscCall(BVRestoreColumn(nep->V,i,&si)); |
| 474 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1122 | max_error = PetscMax(max_error,error); |
| 475 | } | ||
| 476 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 1 times.
|
198 | if (max_error <= nep->tol) nep->reason = NEP_CONVERGED_TOL; |
| 477 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | else if (nep->its > nep->max_it) nep->reason = NEP_DIVERGED_ITS; |
| 478 | else { | ||
| 479 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (nep->nconv > ctx->L) nv = nep->nconv; |
| 480 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | else if (ctx->L > nv) nv = ctx->L; |
| 481 | 1 | nv = PetscMin(nv,ctx->L*ctx->M); | |
| 482 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,nv,ctx->L,NULL,&M)); |
| 483 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | PetscCall(MatSetRandom(M,rand)); |
| 484 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | PetscCall(BVSetActiveColumns(ctx->S,0,nv)); |
| 485 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | PetscCall(BVMultInPlace(ctx->S,M,0,ctx->L)); |
| 486 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | PetscCall(MatDestroy(&M)); |
| 487 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | PetscCall(BVSetActiveColumns(ctx->S,0,ctx->L)); |
| 488 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | PetscCall(BVSetActiveColumns(ctx->V,0,ctx->L)); |
| 489 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | PetscCall(BVCopy(ctx->S,ctx->V)); |
| 490 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 1 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.
|
1 | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); |
| 491 |
5/8✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
|
396 | PetscCall(NEPCISSSolve(nep,J,V,0,ctx->L)); |
| 492 | } | ||
| 493 | } | ||
| 494 | } | ||
| 495 |
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.
|
197 | PetscCall(PetscFree2(Mu,H0)); |
| 496 |
7/10✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ 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.
|
197 | if (ctx->extraction == NEP_CISS_EXTRACTION_HANKEL) PetscCall(PetscFree(H1)); |
| 497 |
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.
|
40 | PetscFunctionReturn(PETSC_SUCCESS); |
| 498 | } | ||
| 499 | |||
| 500 | 190 | static PetscErrorCode NEPCISSSetSizes_CISS(NEP nep,PetscInt ip,PetscInt bs,PetscInt ms,PetscInt npart,PetscInt bsmax,PetscBool realmats) | |
| 501 | { | ||
| 502 | 190 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 503 | 190 | PetscInt oN,oL,oM,oLmax,onpart; | |
| 504 | 190 | PetscMPIInt size; | |
| 505 | |||
| 506 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
190 | PetscFunctionBegin; |
| 507 | 190 | oN = ctx->N; | |
| 508 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
190 | if (ip == PETSC_DETERMINE) { |
| 509 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
65 | if (ctx->N!=32) { ctx->N =32; ctx->M = ctx->N/4; } |
| 510 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
125 | } else if (ip != PETSC_CURRENT) { |
| 511 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
125 | PetscCheck(ip>0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The ip argument must be > 0"); |
| 512 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
125 | PetscCheck(ip%2==0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The ip argument must be an even number"); |
| 513 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
125 | if (ctx->N!=ip) { ctx->N = ip; ctx->M = ctx->N/4; } |
| 514 | } | ||
| 515 | 190 | oL = ctx->L; | |
| 516 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
190 | if (bs == PETSC_DETERMINE) { |
| 517 | 65 | ctx->L = 16; | |
| 518 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
125 | } else if (bs != PETSC_CURRENT) { |
| 519 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
125 | PetscCheck(bs>0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The bs argument must be > 0"); |
| 520 | 125 | ctx->L = bs; | |
| 521 | } | ||
| 522 | 190 | oM = ctx->M; | |
| 523 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
190 | if (ms == PETSC_DETERMINE) { |
| 524 | 65 | ctx->M = ctx->N/4; | |
| 525 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
125 | } else if (ms != PETSC_CURRENT) { |
| 526 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
125 | PetscCheck(ms>0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The ms argument must be > 0"); |
| 527 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
125 | PetscCheck(ms<=ctx->N,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The ms argument must be less than or equal to the number of integration points"); |
| 528 | 125 | ctx->M = ms; | |
| 529 | } | ||
| 530 | 190 | onpart = ctx->npart; | |
| 531 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
190 | if (npart == PETSC_DETERMINE) { |
| 532 | ✗ | ctx->npart = 1; | |
| 533 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
190 | } else if (npart != PETSC_CURRENT) { |
| 534 |
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.
|
190 | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)nep),&size)); |
| 535 |
2/6✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
190 | PetscCheck(npart>0 && npart<=size,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of npart"); |
| 536 | 190 | ctx->npart = npart; | |
| 537 | } | ||
| 538 | 190 | oLmax = ctx->L_max; | |
| 539 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
190 | if (bsmax == PETSC_DETERMINE) { |
| 540 | 65 | ctx->L_max = 64; | |
| 541 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
125 | } else if (bsmax != PETSC_CURRENT) { |
| 542 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
125 | PetscCheck(bsmax>0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The bsmax argument must be > 0"); |
| 543 | 125 | ctx->L_max = PetscMax(bsmax,ctx->L); | |
| 544 | } | ||
| 545 |
5/6✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 5 times.
|
190 | if (onpart != ctx->npart || oN != ctx->N || realmats != ctx->isreal) { |
| 546 |
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.
|
155 | PetscCall(SlepcContourDataDestroy(&ctx->contour)); |
| 547 |
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.
|
155 | PetscCall(PetscInfo(nep,"Resetting the contour data structure due to a change of parameters\n")); |
| 548 | 155 | nep->state = NEP_STATE_INITIAL; | |
| 549 | } | ||
| 550 | 190 | ctx->isreal = realmats; | |
| 551 |
5/6✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 times.
|
190 | if (oL != ctx->L || oM != ctx->M || oLmax != ctx->L_max) nep->state = NEP_STATE_INITIAL; |
| 552 |
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.
|
38 | PetscFunctionReturn(PETSC_SUCCESS); |
| 553 | } | ||
| 554 | |||
| 555 | /*@ | ||
| 556 | NEPCISSSetSizes - Sets the values of various size parameters in the CISS solver. | ||
| 557 | |||
| 558 | Logically Collective | ||
| 559 | |||
| 560 | Input Parameters: | ||
| 561 | + nep - the nonlinear eigensolver context | ||
| 562 | . ip - number of integration points | ||
| 563 | . bs - block size | ||
| 564 | . ms - moment size | ||
| 565 | . npart - number of partitions when splitting the communicator | ||
| 566 | . bsmax - max block size | ||
| 567 | - realmats - $T(z)$ is real for real $z$ | ||
| 568 | |||
| 569 | Options Database Keys: | ||
| 570 | + -nep_ciss_integration_points \<ip\> - sets the number of integration points | ||
| 571 | . -nep_ciss_blocksize \<bs\> - sets the block size | ||
| 572 | . -nep_ciss_moments \<ms\> - sets the moment size | ||
| 573 | . -nep_ciss_partitions \<npart\> - sets the number of partitions | ||
| 574 | . -nep_ciss_maxblocksize \<bsmax\> - sets the maximum block size | ||
| 575 | - -nep_ciss_realmats - $T(z)$ is real for real $z$ | ||
| 576 | |||
| 577 | Notes: | ||
| 578 | For all integer arguments, you can use `PETSC_CURRENT` to keep the current value, and | ||
| 579 | `PETSC_DETERMINE` to set them to a default value. | ||
| 580 | |||
| 581 | The default number of partitions is 1. This means the internal `KSP` object is shared | ||
| 582 | among all processes of the `NEP` communicator. Otherwise, the communicator is split | ||
| 583 | into `npart` communicators, so that `npart` `KSP` solves proceed simultaneously. | ||
| 584 | |||
| 585 | The `realmats` flag can be set to `PETSC_TRUE` when $T(\cdot)$ is guaranteed to be real | ||
| 586 | when the argument is a real value, for example, when all matrices in | ||
| 587 | the split form are real. When set to `PETSC_TRUE`, the solver avoids some computations. | ||
| 588 | |||
| 589 | For a detailed description of the parameters see {cite:p}`Mae16`. | ||
| 590 | |||
| 591 | Level: advanced | ||
| 592 | |||
| 593 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSGetSizes()` | ||
| 594 | @*/ | ||
| 595 | 190 | PetscErrorCode NEPCISSSetSizes(NEP nep,PetscInt ip,PetscInt bs,PetscInt ms,PetscInt npart,PetscInt bsmax,PetscBool realmats) | |
| 596 | { | ||
| 597 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
190 | PetscFunctionBegin; |
| 598 |
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.
|
190 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 599 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
190 | PetscValidLogicalCollectiveInt(nep,ip,2); |
| 600 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
190 | PetscValidLogicalCollectiveInt(nep,bs,3); |
| 601 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
190 | PetscValidLogicalCollectiveInt(nep,ms,4); |
| 602 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
190 | PetscValidLogicalCollectiveInt(nep,npart,5); |
| 603 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
190 | PetscValidLogicalCollectiveInt(nep,bsmax,6); |
| 604 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
190 | PetscValidLogicalCollectiveBool(nep,realmats,7); |
| 605 |
8/14✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 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.
|
190 | PetscTryMethod(nep,"NEPCISSSetSizes_C",(NEP,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscBool),(nep,ip,bs,ms,npart,bsmax,realmats)); |
| 606 |
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.
|
190 | PetscFunctionReturn(PETSC_SUCCESS); |
| 607 | } | ||
| 608 | |||
| 609 | 187 | static PetscErrorCode NEPCISSGetSizes_CISS(NEP nep,PetscInt *ip,PetscInt *bs,PetscInt *ms,PetscInt *npart,PetscInt *bsmax,PetscBool *realmats) | |
| 610 | { | ||
| 611 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 612 | |||
| 613 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 614 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (ip) *ip = ctx->N; |
| 615 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (bs) *bs = ctx->L; |
| 616 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (ms) *ms = ctx->M; |
| 617 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (npart) *npart = ctx->npart; |
| 618 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (bsmax) *bsmax = ctx->L_max; |
| 619 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (realmats) *realmats = ctx->isreal; |
| 620 |
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.
|
187 | PetscFunctionReturn(PETSC_SUCCESS); |
| 621 | } | ||
| 622 | |||
| 623 | /*@ | ||
| 624 | NEPCISSGetSizes - Gets the values of various size parameters in the CISS solver. | ||
| 625 | |||
| 626 | Not Collective | ||
| 627 | |||
| 628 | Input Parameter: | ||
| 629 | . nep - the nonlinear eigensolver context | ||
| 630 | |||
| 631 | Output Parameters: | ||
| 632 | + ip - number of integration points | ||
| 633 | . bs - block size | ||
| 634 | . ms - moment size | ||
| 635 | . npart - number of partitions when splitting the communicator | ||
| 636 | . bsmax - max block size | ||
| 637 | - realmats - $T(z)$ is real for real $z$ | ||
| 638 | |||
| 639 | Level: advanced | ||
| 640 | |||
| 641 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSSetSizes()` | ||
| 642 | @*/ | ||
| 643 | 187 | PetscErrorCode NEPCISSGetSizes(NEP nep,PetscInt *ip,PetscInt *bs,PetscInt *ms,PetscInt *npart,PetscInt *bsmax,PetscBool *realmats) | |
| 644 | { | ||
| 645 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 646 |
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.
|
187 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 647 |
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.
|
187 | PetscUseMethod(nep,"NEPCISSGetSizes_C",(NEP,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscBool*),(nep,ip,bs,ms,npart,bsmax,realmats)); |
| 648 |
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.
|
187 | PetscFunctionReturn(PETSC_SUCCESS); |
| 649 | } | ||
| 650 | |||
| 651 | 15 | static PetscErrorCode NEPCISSSetThreshold_CISS(NEP nep,PetscReal delta,PetscReal spur) | |
| 652 | { | ||
| 653 | 15 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 654 | |||
| 655 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
| 656 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (delta == (PetscReal)PETSC_DETERMINE) { |
| 657 | ✗ | ctx->delta = SLEPC_DEFAULT_TOL*1e-4; | |
| 658 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (delta != (PetscReal)PETSC_CURRENT) { |
| 659 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15 | PetscCheck(delta>0.0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The delta argument must be > 0.0"); |
| 660 | 15 | ctx->delta = delta; | |
| 661 | } | ||
| 662 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (spur == (PetscReal)PETSC_DETERMINE) { |
| 663 | ✗ | ctx->spurious_threshold = PetscSqrtReal(SLEPC_DEFAULT_TOL); | |
| 664 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (spur != (PetscReal)PETSC_CURRENT) { |
| 665 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15 | PetscCheck(spur>0.0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The spurious threshold argument must be > 0.0"); |
| 666 | 15 | ctx->spurious_threshold = spur; | |
| 667 | } | ||
| 668 |
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.
|
3 | PetscFunctionReturn(PETSC_SUCCESS); |
| 669 | } | ||
| 670 | |||
| 671 | /*@ | ||
| 672 | NEPCISSSetThreshold - Sets the values of various threshold parameters in | ||
| 673 | the CISS solver. | ||
| 674 | |||
| 675 | Logically Collective | ||
| 676 | |||
| 677 | Input Parameters: | ||
| 678 | + nep - the nonlinear eigensolver context | ||
| 679 | . delta - threshold for numerical rank | ||
| 680 | - spur - spurious threshold (to discard spurious eigenpairs) | ||
| 681 | |||
| 682 | Options Database Keys: | ||
| 683 | + -nep_ciss_delta \<delta\> - sets the delta | ||
| 684 | - -nep_ciss_spurious_threshold \<spur\> - sets the spurious threshold | ||
| 685 | |||
| 686 | Notes: | ||
| 687 | `PETSC_CURRENT` can be used to preserve the current value of any of the | ||
| 688 | arguments, and `PETSC_DETERMINE` to set them to a default value. | ||
| 689 | |||
| 690 | For a detailed description of the parameters see {cite:p}`Mae16`. | ||
| 691 | |||
| 692 | Level: advanced | ||
| 693 | |||
| 694 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSGetThreshold()` | ||
| 695 | @*/ | ||
| 696 | 15 | PetscErrorCode NEPCISSSetThreshold(NEP nep,PetscReal delta,PetscReal spur) | |
| 697 | { | ||
| 698 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
| 699 |
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.
|
15 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 700 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 1 times.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 1 times.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 1 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 1 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 1 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 1 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
15 | PetscValidLogicalCollectiveReal(nep,delta,2); |
| 701 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 1 times.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 1 times.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 1 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 1 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 1 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 1 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
15 | PetscValidLogicalCollectiveReal(nep,spur,3); |
| 702 |
8/14✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 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.
|
15 | PetscTryMethod(nep,"NEPCISSSetThreshold_C",(NEP,PetscReal,PetscReal),(nep,delta,spur)); |
| 703 |
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.
|
15 | PetscFunctionReturn(PETSC_SUCCESS); |
| 704 | } | ||
| 705 | |||
| 706 | 187 | static PetscErrorCode NEPCISSGetThreshold_CISS(NEP nep,PetscReal *delta,PetscReal *spur) | |
| 707 | { | ||
| 708 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 709 | |||
| 710 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 711 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (delta) *delta = ctx->delta; |
| 712 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (spur) *spur = ctx->spurious_threshold; |
| 713 |
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.
|
187 | PetscFunctionReturn(PETSC_SUCCESS); |
| 714 | } | ||
| 715 | |||
| 716 | /*@ | ||
| 717 | NEPCISSGetThreshold - Gets the values of various threshold parameters in | ||
| 718 | the CISS solver. | ||
| 719 | |||
| 720 | Not Collective | ||
| 721 | |||
| 722 | Input Parameter: | ||
| 723 | . nep - the nonlinear eigensolver context | ||
| 724 | |||
| 725 | Output Parameters: | ||
| 726 | + delta - threshold for numerical rank | ||
| 727 | - spur - spurious threshold (to discard spurious eigenpairs) | ||
| 728 | |||
| 729 | Level: advanced | ||
| 730 | |||
| 731 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSSetThreshold()` | ||
| 732 | @*/ | ||
| 733 | 187 | PetscErrorCode NEPCISSGetThreshold(NEP nep,PetscReal *delta,PetscReal *spur) | |
| 734 | { | ||
| 735 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 736 |
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.
|
187 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 737 |
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.
|
187 | PetscUseMethod(nep,"NEPCISSGetThreshold_C",(NEP,PetscReal*,PetscReal*),(nep,delta,spur)); |
| 738 |
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.
|
187 | PetscFunctionReturn(PETSC_SUCCESS); |
| 739 | } | ||
| 740 | |||
| 741 | 15 | static PetscErrorCode NEPCISSSetRefinement_CISS(NEP nep,PetscInt inner,PetscInt blsize) | |
| 742 | { | ||
| 743 | 15 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 744 | |||
| 745 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
| 746 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (inner == PETSC_DETERMINE) { |
| 747 | ✗ | ctx->refine_inner = 0; | |
| 748 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (inner != PETSC_CURRENT) { |
| 749 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15 | PetscCheck(inner>=0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The refine inner argument must be >= 0"); |
| 750 | 15 | ctx->refine_inner = inner; | |
| 751 | } | ||
| 752 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (blsize == PETSC_DETERMINE) { |
| 753 | ✗ | ctx->refine_blocksize = 0; | |
| 754 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (blsize != PETSC_CURRENT) { |
| 755 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15 | PetscCheck(blsize>=0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"The refine blocksize argument must be >= 0"); |
| 756 | 15 | ctx->refine_blocksize = blsize; | |
| 757 | } | ||
| 758 |
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.
|
3 | PetscFunctionReturn(PETSC_SUCCESS); |
| 759 | } | ||
| 760 | |||
| 761 | /*@ | ||
| 762 | NEPCISSSetRefinement - Sets the values of various refinement parameters | ||
| 763 | in the CISS solver. | ||
| 764 | |||
| 765 | Logically Collective | ||
| 766 | |||
| 767 | Input Parameters: | ||
| 768 | + nep - the nonlinear eigensolver context | ||
| 769 | . inner - number of iterative refinement iterations (inner loop) | ||
| 770 | - blsize - number of iterative refinement iterations (blocksize loop) | ||
| 771 | |||
| 772 | Options Database Keys: | ||
| 773 | + -nep_ciss_refine_inner \<inner\> - sets number of inner iterations | ||
| 774 | - -nep_ciss_refine_blocksize \<blsize\> - sets number of blocksize iterations | ||
| 775 | |||
| 776 | Note: | ||
| 777 | `PETSC_CURRENT` can be used to preserve the current value of any of the | ||
| 778 | arguments, and `PETSC_DETERMINE` to set them to a default of 0 (no refinement). | ||
| 779 | |||
| 780 | Level: advanced | ||
| 781 | |||
| 782 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSGetRefinement()` | ||
| 783 | @*/ | ||
| 784 | 15 | PetscErrorCode NEPCISSSetRefinement(NEP nep,PetscInt inner,PetscInt blsize) | |
| 785 | { | ||
| 786 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
| 787 |
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.
|
15 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 788 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
15 | PetscValidLogicalCollectiveInt(nep,inner,2); |
| 789 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
15 | PetscValidLogicalCollectiveInt(nep,blsize,3); |
| 790 |
8/14✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 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.
|
15 | PetscTryMethod(nep,"NEPCISSSetRefinement_C",(NEP,PetscInt,PetscInt),(nep,inner,blsize)); |
| 791 |
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.
|
15 | PetscFunctionReturn(PETSC_SUCCESS); |
| 792 | } | ||
| 793 | |||
| 794 | 187 | static PetscErrorCode NEPCISSGetRefinement_CISS(NEP nep,PetscInt *inner,PetscInt *blsize) | |
| 795 | { | ||
| 796 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 797 | |||
| 798 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 799 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (inner) *inner = ctx->refine_inner; |
| 800 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (blsize) *blsize = ctx->refine_blocksize; |
| 801 |
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.
|
187 | PetscFunctionReturn(PETSC_SUCCESS); |
| 802 | } | ||
| 803 | |||
| 804 | /*@ | ||
| 805 | NEPCISSGetRefinement - Gets the values of various refinement parameters | ||
| 806 | in the CISS solver. | ||
| 807 | |||
| 808 | Not Collective | ||
| 809 | |||
| 810 | Input Parameter: | ||
| 811 | . nep - the nonlinear eigensolver context | ||
| 812 | |||
| 813 | Output Parameters: | ||
| 814 | + inner - number of iterative refinement iterations (inner loop) | ||
| 815 | - blsize - number of iterative refinement iterations (blocksize loop) | ||
| 816 | |||
| 817 | Level: advanced | ||
| 818 | |||
| 819 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSSetRefinement()` | ||
| 820 | @*/ | ||
| 821 | 187 | PetscErrorCode NEPCISSGetRefinement(NEP nep, PetscInt *inner, PetscInt *blsize) | |
| 822 | { | ||
| 823 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 824 |
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.
|
187 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 825 |
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.
|
187 | PetscUseMethod(nep,"NEPCISSGetRefinement_C",(NEP,PetscInt*,PetscInt*),(nep,inner,blsize)); |
| 826 |
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.
|
187 | PetscFunctionReturn(PETSC_SUCCESS); |
| 827 | } | ||
| 828 | |||
| 829 | 120 | static PetscErrorCode NEPCISSSetExtraction_CISS(NEP nep,NEPCISSExtraction extraction) | |
| 830 | { | ||
| 831 | 120 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 832 | |||
| 833 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
120 | PetscFunctionBegin; |
| 834 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
120 | if (ctx->extraction != extraction) { |
| 835 | 80 | ctx->extraction = extraction; | |
| 836 | 80 | nep->state = NEP_STATE_INITIAL; | |
| 837 | } | ||
| 838 |
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.
|
120 | PetscFunctionReturn(PETSC_SUCCESS); |
| 839 | } | ||
| 840 | |||
| 841 | /*@ | ||
| 842 | NEPCISSSetExtraction - Sets the extraction technique used in the CISS solver. | ||
| 843 | |||
| 844 | Logically Collective | ||
| 845 | |||
| 846 | Input Parameters: | ||
| 847 | + nep - the nonlinear eigensolver context | ||
| 848 | - extraction - the extraction technique, see `NEPCISSExtraction` for possible values | ||
| 849 | |||
| 850 | Options Database Key: | ||
| 851 | . -nep_ciss_extraction \<extraction\> - Sets the extraction technique, either `ritz`, `hankel` or `caa` | ||
| 852 | |||
| 853 | Notes: | ||
| 854 | By default, the Rayleigh-Ritz extraction is used (`NEP_CISS_EXTRACTION_RITZ`). | ||
| 855 | |||
| 856 | If the `hankel` or the `caa` option is specified (`NEP_CISS_EXTRACTION_HANKEL` or | ||
| 857 | `NEP_CISS_EXTRACTION_CAA`), then the block Hankel method, or the communication-avoiding | ||
| 858 | Arnoldi method, respectively, is used for extracting eigenpairs. | ||
| 859 | |||
| 860 | Level: advanced | ||
| 861 | |||
| 862 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSGetExtraction()`, `NEPCISSExtraction` | ||
| 863 | @*/ | ||
| 864 | 120 | PetscErrorCode NEPCISSSetExtraction(NEP nep,NEPCISSExtraction extraction) | |
| 865 | { | ||
| 866 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
120 | PetscFunctionBegin; |
| 867 |
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.
|
120 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 868 |
27/62✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ 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.
✗ Branch 58 not taken.
✓ Branch 59 taken 1 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
120 | PetscValidLogicalCollectiveEnum(nep,extraction,2); |
| 869 |
8/14✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 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.
|
120 | PetscTryMethod(nep,"NEPCISSSetExtraction_C",(NEP,NEPCISSExtraction),(nep,extraction)); |
| 870 |
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.
|
120 | PetscFunctionReturn(PETSC_SUCCESS); |
| 871 | } | ||
| 872 | |||
| 873 | 65 | static PetscErrorCode NEPCISSGetExtraction_CISS(NEP nep,NEPCISSExtraction *extraction) | |
| 874 | { | ||
| 875 | 65 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 876 | |||
| 877 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
| 878 | 65 | *extraction = ctx->extraction; | |
| 879 |
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.
|
65 | PetscFunctionReturn(PETSC_SUCCESS); |
| 880 | } | ||
| 881 | |||
| 882 | /*@ | ||
| 883 | NEPCISSGetExtraction - Gets the extraction technique used in the CISS solver. | ||
| 884 | |||
| 885 | Not Collective | ||
| 886 | |||
| 887 | Input Parameter: | ||
| 888 | . nep - the nonlinear eigensolver context | ||
| 889 | |||
| 890 | Output Parameter: | ||
| 891 | . extraction - extraction technique | ||
| 892 | |||
| 893 | Level: advanced | ||
| 894 | |||
| 895 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSSetExtraction()`, `NEPCISSExtraction` | ||
| 896 | @*/ | ||
| 897 | 65 | PetscErrorCode NEPCISSGetExtraction(NEP nep,NEPCISSExtraction *extraction) | |
| 898 | { | ||
| 899 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
| 900 |
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.
|
65 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 901 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
65 | PetscAssertPointer(extraction,2); |
| 902 |
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.
|
65 | PetscUseMethod(nep,"NEPCISSGetExtraction_C",(NEP,NEPCISSExtraction*),(nep,extraction)); |
| 903 |
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.
|
65 | PetscFunctionReturn(PETSC_SUCCESS); |
| 904 | } | ||
| 905 | |||
| 906 | 217 | static PetscErrorCode NEPCISSGetKSPs_CISS(NEP nep,PetscInt *nsolve,KSP **ksp) | |
| 907 | { | ||
| 908 | 217 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 909 | 217 | SlepcContourData contour; | |
| 910 | 217 | PetscInt i; | |
| 911 | 217 | PC pc; | |
| 912 | 217 | MPI_Comm child; | |
| 913 | |||
| 914 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
217 | PetscFunctionBegin; |
| 915 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
217 | if (!ctx->contour) { /* initialize contour data structure first */ |
| 916 |
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.
|
217 | PetscCall(RGCanUseConjugates(nep->rg,ctx->isreal,&ctx->useconj)); |
| 917 |
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.
|
217 | PetscCall(SlepcContourDataCreate(ctx->useconj?ctx->N/2:ctx->N,ctx->npart,(PetscObject)nep,&ctx->contour)); |
| 918 | } | ||
| 919 | 217 | contour = ctx->contour; | |
| 920 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
217 | if (!contour->ksp) { |
| 921 |
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.
|
217 | PetscCall(PetscMalloc1(contour->npoints,&contour->ksp)); |
| 922 |
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.
|
217 | PetscCall(PetscSubcommGetChild(contour->subcomm,&child)); |
| 923 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4281 | for (i=0;i<contour->npoints;i++) { |
| 924 |
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.
|
4064 | PetscCall(KSPCreate(child,&contour->ksp[i])); |
| 925 |
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.
|
4064 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)contour->ksp[i],(PetscObject)nep,1)); |
| 926 |
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.
|
4064 | PetscCall(KSPSetOptionsPrefix(contour->ksp[i],((PetscObject)nep)->prefix)); |
| 927 |
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.
|
4064 | PetscCall(KSPAppendOptionsPrefix(contour->ksp[i],"nep_ciss_")); |
| 928 |
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.
|
4064 | PetscCall(PetscObjectSetOptions((PetscObject)contour->ksp[i],((PetscObject)nep)->options)); |
| 929 |
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.
|
4064 | PetscCall(KSPSetErrorIfNotConverged(contour->ksp[i],PETSC_TRUE)); |
| 930 |
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.
|
6016 | PetscCall(KSPSetTolerances(contour->ksp[i],SlepcDefaultTol(nep->tol),PETSC_CURRENT,PETSC_CURRENT,PETSC_CURRENT)); |
| 931 |
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.
|
4064 | PetscCall(KSPGetPC(contour->ksp[i],&pc)); |
| 932 |
8/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 5 times.
✓ Branch 6 taken 5 times.
✓ Branch 7 taken 5 times.
|
4064 | if ((nep->fui==NEP_USER_INTERFACE_SPLIT && nep->P) || (nep->fui==NEP_USER_INTERFACE_CALLBACK && nep->function_pre!=nep->function)) { |
| 933 |
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.
|
480 | PetscCall(KSPSetType(contour->ksp[i],KSPBCGS)); |
| 934 |
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.
|
480 | PetscCall(PCSetType(pc,PCBJACOBI)); |
| 935 | } else { | ||
| 936 |
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.
|
3584 | PetscCall(KSPSetType(contour->ksp[i],KSPPREONLY)); |
| 937 |
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.
|
4064 | PetscCall(PCSetType(pc,PCLU)); |
| 938 | } | ||
| 939 | } | ||
| 940 | } | ||
| 941 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
217 | if (nsolve) *nsolve = contour->npoints; |
| 942 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
217 | if (ksp) *ksp = contour->ksp; |
| 943 |
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.
|
44 | PetscFunctionReturn(PETSC_SUCCESS); |
| 944 | } | ||
| 945 | |||
| 946 | /*@C | ||
| 947 | NEPCISSGetKSPs - Retrieve the array of linear solver objects associated with | ||
| 948 | the CISS solver. | ||
| 949 | |||
| 950 | Collective | ||
| 951 | |||
| 952 | Input Parameter: | ||
| 953 | . nep - the nonlinear eigensolver context | ||
| 954 | |||
| 955 | Output Parameters: | ||
| 956 | + nsolve - number of solver objects | ||
| 957 | - ksp - array of linear solver object | ||
| 958 | |||
| 959 | Notes: | ||
| 960 | The number of `KSP` solvers is equal to the number of integration points divided by | ||
| 961 | the number of partitions. This value is halved in the case of real matrices with | ||
| 962 | a region centered at the real axis. | ||
| 963 | |||
| 964 | Level: advanced | ||
| 965 | |||
| 966 | .seealso: [](ch:nep), `NEPCISS`, `NEPCISSSetSizes()` | ||
| 967 | @*/ | ||
| 968 | 217 | PetscErrorCode NEPCISSGetKSPs(NEP nep,PetscInt *nsolve,KSP **ksp) | |
| 969 | { | ||
| 970 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
217 | PetscFunctionBegin; |
| 971 |
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.
|
217 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
| 972 |
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.
|
217 | PetscUseMethod(nep,"NEPCISSGetKSPs_C",(NEP,PetscInt*,KSP**),(nep,nsolve,ksp)); |
| 973 |
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.
|
217 | PetscFunctionReturn(PETSC_SUCCESS); |
| 974 | } | ||
| 975 | |||
| 976 | 197 | static PetscErrorCode NEPReset_CISS(NEP nep) | |
| 977 | { | ||
| 978 | 197 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 979 | |||
| 980 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
197 | PetscFunctionBegin; |
| 981 |
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.
|
197 | PetscCall(BVDestroy(&ctx->S)); |
| 982 |
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.
|
197 | PetscCall(BVDestroy(&ctx->V)); |
| 983 |
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.
|
197 | PetscCall(BVDestroy(&ctx->Y)); |
| 984 |
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.
|
197 | PetscCall(SlepcContourDataReset(ctx->contour)); |
| 985 |
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.
|
197 | PetscCall(MatDestroy(&ctx->J)); |
| 986 |
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.
|
197 | PetscCall(BVDestroy(&ctx->pV)); |
| 987 |
9/12✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 4 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
197 | if (ctx->extraction == NEP_CISS_EXTRACTION_RITZ && nep->fui==NEP_USER_INTERFACE_CALLBACK) PetscCall(PetscFree(ctx->dsctxf)); |
| 988 |
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.
|
40 | PetscFunctionReturn(PETSC_SUCCESS); |
| 989 | } | ||
| 990 | |||
| 991 | 187 | static PetscErrorCode NEPSetFromOptions_CISS(NEP nep,PetscOptionItems PetscOptionsObject) | |
| 992 | { | ||
| 993 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 994 | 187 | PetscReal r1,r2; | |
| 995 | 187 | PetscInt i,i1,i2,i3,i4,i5,i6,i7; | |
| 996 | 187 | PetscBool b1,flg,flg2,flg3,flg4,flg5,flg6; | |
| 997 | 187 | NEPCISSExtraction extraction; | |
| 998 | |||
| 999 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 1000 |
1/12✗ 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.
|
187 | PetscOptionsHeadBegin(PetscOptionsObject,"NEP CISS Options"); |
| 1001 | |||
| 1002 |
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.
|
187 | PetscCall(NEPCISSGetSizes(nep,&i1,&i2,&i3,&i4,&i5,&b1)); |
| 1003 |
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.
|
187 | PetscCall(PetscOptionsInt("-nep_ciss_integration_points","Number of integration points","NEPCISSSetSizes",i1,&i1,&flg)); |
| 1004 |
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.
|
187 | PetscCall(PetscOptionsInt("-nep_ciss_blocksize","Block size","NEPCISSSetSizes",i2,&i2,&flg2)); |
| 1005 |
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.
|
187 | PetscCall(PetscOptionsInt("-nep_ciss_moments","Moment size","NEPCISSSetSizes",i3,&i3,&flg3)); |
| 1006 |
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.
|
187 | PetscCall(PetscOptionsInt("-nep_ciss_partitions","Number of partitions","NEPCISSSetSizes",i4,&i4,&flg4)); |
| 1007 |
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.
|
187 | PetscCall(PetscOptionsInt("-nep_ciss_maxblocksize","Maximum block size","NEPCISSSetSizes",i5,&i5,&flg5)); |
| 1008 |
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.
|
187 | PetscCall(PetscOptionsBool("-nep_ciss_realmats","True if T(z) is real for real z","NEPCISSSetSizes",b1,&b1,&flg6)); |
| 1009 |
13/18✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 5 times.
✓ Branch 6 taken 5 times.
✓ Branch 7 taken 5 times.
✓ Branch 8 taken 5 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 5 times.
✓ Branch 12 taken 1 times.
✓ Branch 13 taken 4 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
|
187 | if (flg || flg2 || flg3 || flg4 || flg5 || flg6) PetscCall(NEPCISSSetSizes(nep,i1,i2,i3,i4,i5,b1)); |
| 1010 | |||
| 1011 |
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.
|
187 | PetscCall(NEPCISSGetThreshold(nep,&r1,&r2)); |
| 1012 |
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.
|
187 | PetscCall(PetscOptionsReal("-nep_ciss_delta","Threshold for numerical rank","NEPCISSSetThreshold",r1,&r1,&flg)); |
| 1013 |
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.
|
187 | PetscCall(PetscOptionsReal("-nep_ciss_spurious_threshold","Threshold for the spurious eigenpairs","NEPCISSSetThreshold",r2,&r2,&flg2)); |
| 1014 |
7/10✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ 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.
|
187 | if (flg || flg2) PetscCall(NEPCISSSetThreshold(nep,r1,r2)); |
| 1015 | |||
| 1016 |
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.
|
187 | PetscCall(NEPCISSGetRefinement(nep,&i6,&i7)); |
| 1017 |
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.
|
187 | PetscCall(PetscOptionsInt("-nep_ciss_refine_inner","Number of inner iterative refinement iterations","NEPCISSSetRefinement",i6,&i6,&flg)); |
| 1018 |
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.
|
187 | PetscCall(PetscOptionsInt("-nep_ciss_refine_blocksize","Number of blocksize iterative refinement iterations","NEPCISSSetRefinement",i7,&i7,&flg2)); |
| 1019 |
7/10✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ 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.
|
187 | if (flg || flg2) PetscCall(NEPCISSSetRefinement(nep,i6,i7)); |
| 1020 | |||
| 1021 |
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.
|
187 | PetscCall(PetscOptionsEnum("-nep_ciss_extraction","Extraction technique","NEPCISSSetExtraction",NEPCISSExtractions,(PetscEnum)ctx->extraction,(PetscEnum*)&extraction,&flg)); |
| 1022 |
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.
|
187 | if (flg) PetscCall(NEPCISSSetExtraction(nep,extraction)); |
| 1023 | |||
| 1024 |
2/14✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 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.
|
187 | PetscOptionsHeadEnd(); |
| 1025 | |||
| 1026 |
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.
|
187 | if (!nep->rg) PetscCall(NEPGetRG(nep,&nep->rg)); |
| 1027 |
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.
|
187 | PetscCall(RGSetFromOptions(nep->rg)); /* this is necessary here to set useconj */ |
| 1028 |
8/10✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 4 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
187 | if (!ctx->contour || !ctx->contour->ksp) PetscCall(NEPCISSGetKSPs(nep,NULL,NULL)); |
| 1029 |
2/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
38 | PetscAssert(ctx->contour && ctx->contour->ksp,PetscObjectComm((PetscObject)nep),PETSC_ERR_PLIB,"Something went wrong with NEPCISSGetKSPs()"); |
| 1030 |
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.
|
3771 | for (i=0;i<ctx->contour->npoints;i++) PetscCall(KSPSetFromOptions(ctx->contour->ksp[i])); |
| 1031 |
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.
|
187 | PetscCall(PetscSubcommSetFromOptions(ctx->contour->subcomm)); |
| 1032 |
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.
|
38 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1033 | } | ||
| 1034 | |||
| 1035 | 187 | static PetscErrorCode NEPDestroy_CISS(NEP nep) | |
| 1036 | { | ||
| 1037 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 1038 | |||
| 1039 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 1040 |
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.
|
187 | PetscCall(SlepcContourDataDestroy(&ctx->contour)); |
| 1041 |
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.
|
187 | PetscCall(PetscFree4(ctx->weight,ctx->omega,ctx->pp,ctx->sigma)); |
| 1042 |
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.
|
187 | PetscCall(PetscFree(nep->data)); |
| 1043 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetSizes_C",NULL)); |
| 1044 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetSizes_C",NULL)); |
| 1045 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetThreshold_C",NULL)); |
| 1046 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetThreshold_C",NULL)); |
| 1047 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetRefinement_C",NULL)); |
| 1048 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetRefinement_C",NULL)); |
| 1049 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetExtraction_C",NULL)); |
| 1050 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetExtraction_C",NULL)); |
| 1051 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetKSPs_C",NULL)); |
| 1052 |
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.
|
38 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1053 | } | ||
| 1054 | |||
| 1055 | 5 | static PetscErrorCode NEPView_CISS(NEP nep,PetscViewer viewer) | |
| 1056 | { | ||
| 1057 | 5 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 1058 | 5 | PetscBool isascii; | |
| 1059 | 5 | PetscViewer sviewer; | |
| 1060 | |||
| 1061 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
5 | PetscFunctionBegin; |
| 1062 |
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.
|
5 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 1063 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
5 | if (isascii) { |
| 1064 |
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.
|
5 | PetscCall(PetscViewerASCIIPrintf(viewer," sizes { integration points: %" PetscInt_FMT ", block size: %" PetscInt_FMT ", moment size: %" PetscInt_FMT ", partitions: %" PetscInt_FMT ", maximum block size: %" PetscInt_FMT " }\n",ctx->N,ctx->L,ctx->M,ctx->npart,ctx->L_max)); |
| 1065 |
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.
|
5 | if (ctx->isreal) PetscCall(PetscViewerASCIIPrintf(viewer," exploiting symmetry of integration points\n")); |
| 1066 |
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.
|
5 | PetscCall(PetscViewerASCIIPrintf(viewer," threshold { delta: %g, spurious threshold: %g }\n",(double)ctx->delta,(double)ctx->spurious_threshold)); |
| 1067 |
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.
|
5 | PetscCall(PetscViewerASCIIPrintf(viewer," iterative refinement { inner: %" PetscInt_FMT ", blocksize: %" PetscInt_FMT " }\n",ctx->refine_inner, ctx->refine_blocksize)); |
| 1068 |
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.
|
5 | PetscCall(PetscViewerASCIIPrintf(viewer," extraction: %s\n",NEPCISSExtractions[ctx->extraction])); |
| 1069 |
2/10✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
5 | if (!ctx->contour || !ctx->contour->ksp) PetscCall(NEPCISSGetKSPs(nep,NULL,NULL)); |
| 1070 |
2/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
5 | PetscAssert(ctx->contour && ctx->contour->ksp,PetscObjectComm((PetscObject)nep),PETSC_ERR_PLIB,"Something went wrong with NEPCISSGetKSPs()"); |
| 1071 |
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.
|
5 | PetscCall(PetscViewerASCIIPushTab(viewer)); |
| 1072 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
5 | if (ctx->npart>1 && ctx->contour->subcomm) { |
| 1073 | ✗ | PetscCall(PetscViewerGetSubViewer(viewer,ctx->contour->subcomm->child,&sviewer)); | |
| 1074 | ✗ | if (!ctx->contour->subcomm->color) PetscCall(KSPView(ctx->contour->ksp[0],sviewer)); | |
| 1075 | ✗ | PetscCall(PetscViewerFlush(sviewer)); | |
| 1076 | ✗ | PetscCall(PetscViewerRestoreSubViewer(viewer,ctx->contour->subcomm->child,&sviewer)); | |
| 1077 | /* extra call needed because of the two calls to PetscViewerASCIIPushSynchronized() in PetscViewerGetSubViewer() */ | ||
| 1078 | ✗ | PetscCall(PetscViewerASCIIPopSynchronized(viewer)); | |
| 1079 |
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.
|
5 | } else PetscCall(KSPView(ctx->contour->ksp[0],viewer)); |
| 1080 |
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.
|
5 | PetscCall(PetscViewerASCIIPopTab(viewer)); |
| 1081 | } | ||
| 1082 |
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.
|
1 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1083 | } | ||
| 1084 | |||
| 1085 | 384 | static PetscErrorCode NEPSetDSType_CISS(NEP nep) | |
| 1086 | { | ||
| 1087 | 384 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 1088 | |||
| 1089 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
384 | PetscFunctionBegin; |
| 1090 |
3/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
|
384 | switch (ctx->extraction) { |
| 1091 |
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.
|
224 | case NEP_CISS_EXTRACTION_RITZ: PetscCall(DSSetType(nep->ds,DSNEP)); break; |
| 1092 |
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 | case NEP_CISS_EXTRACTION_HANKEL: PetscCall(DSSetType(nep->ds,DSGNHEP)); break; |
| 1093 |
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 | case NEP_CISS_EXTRACTION_CAA: PetscCall(DSSetType(nep->ds,DSNHEP)); break; |
| 1094 | } | ||
| 1095 |
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.
|
78 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1096 | } | ||
| 1097 | |||
| 1098 | /*MC | ||
| 1099 | NEPCISS - NEPCISS = "ciss" - A contour integral eigensolver based on the | ||
| 1100 | Sakurai-Sugiura scheme. | ||
| 1101 | |||
| 1102 | Notes: | ||
| 1103 | This solver is based on the numerical contour integration idea | ||
| 1104 | proposed initially for linear problems by {cite:t}`Sak03`. In nonlinear | ||
| 1105 | eigenproblems, a Rayleigh-Ritz projection is done, resulting in | ||
| 1106 | a small dense nonlinear eigenproblem {cite:p}`Asa09,Yok13`. | ||
| 1107 | |||
| 1108 | Contour integral methods are able to compute all eigenvalues | ||
| 1109 | lying inside a region of the complex plane. Use `NEPGetRG()` to | ||
| 1110 | specify the region. However, the computational cost is usually high | ||
| 1111 | because multiple linear systems must be solved. Use `NEPCISSGetKSPs()` | ||
| 1112 | to configure the `KSP` objects for this. | ||
| 1113 | |||
| 1114 | Details of the implementation in SLEPc can be found in {cite:p}`Mae16`. | ||
| 1115 | |||
| 1116 | Level: beginner | ||
| 1117 | |||
| 1118 | .seealso: [](ch:nep), `NEP`, `NEPType`, `NEPSetType()`, `NEPGetRG()` | ||
| 1119 | M*/ | ||
| 1120 | 187 | SLEPC_EXTERN PetscErrorCode NEPCreate_CISS(NEP nep) | |
| 1121 | { | ||
| 1122 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
| 1123 | |||
| 1124 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
| 1125 |
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.
|
187 | PetscCall(PetscNew(&ctx)); |
| 1126 | 187 | nep->data = ctx; | |
| 1127 | /* set default values of parameters */ | ||
| 1128 | 187 | ctx->N = 32; | |
| 1129 | 187 | ctx->L = 16; | |
| 1130 | 187 | ctx->M = ctx->N/4; | |
| 1131 | 187 | ctx->delta = SLEPC_DEFAULT_TOL*1e-4; | |
| 1132 | 187 | ctx->L_max = 64; | |
| 1133 | 187 | ctx->spurious_threshold = PetscSqrtReal(SLEPC_DEFAULT_TOL); | |
| 1134 | 187 | ctx->isreal = PETSC_FALSE; | |
| 1135 | 187 | ctx->npart = 1; | |
| 1136 | |||
| 1137 | 187 | nep->useds = PETSC_TRUE; | |
| 1138 | |||
| 1139 | 187 | nep->ops->solve = NEPSolve_CISS; | |
| 1140 | 187 | nep->ops->setup = NEPSetUp_CISS; | |
| 1141 | 187 | nep->ops->setfromoptions = NEPSetFromOptions_CISS; | |
| 1142 | 187 | nep->ops->reset = NEPReset_CISS; | |
| 1143 | 187 | nep->ops->destroy = NEPDestroy_CISS; | |
| 1144 | 187 | nep->ops->view = NEPView_CISS; | |
| 1145 | 187 | nep->ops->setdstype = NEPSetDSType_CISS; | |
| 1146 | |||
| 1147 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetSizes_C",NEPCISSSetSizes_CISS)); |
| 1148 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetSizes_C",NEPCISSGetSizes_CISS)); |
| 1149 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetThreshold_C",NEPCISSSetThreshold_CISS)); |
| 1150 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetThreshold_C",NEPCISSGetThreshold_CISS)); |
| 1151 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetRefinement_C",NEPCISSSetRefinement_CISS)); |
| 1152 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetRefinement_C",NEPCISSGetRefinement_CISS)); |
| 1153 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetExtraction_C",NEPCISSSetExtraction_CISS)); |
| 1154 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetExtraction_C",NEPCISSGetExtraction_CISS)); |
| 1155 |
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.
|
187 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetKSPs_C",NEPCISSGetKSPs_CISS)); |
| 1156 |
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.
|
38 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1157 | } | ||
| 1158 |