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 nonlinear eigensolver: "slp" | ||
12 | |||
13 | Method: Successive linear problems | ||
14 | |||
15 | Algorithm: | ||
16 | |||
17 | Newton-type iteration based on first order Taylor approximation. | ||
18 | |||
19 | References: | ||
20 | |||
21 | [1] A. Ruhe, "Algorithms for the nonlinear eigenvalue problem", SIAM J. | ||
22 | Numer. Anal. 10(4):674-689, 1973. | ||
23 | */ | ||
24 | |||
25 | #include <slepc/private/nepimpl.h> /*I "slepcnep.h" I*/ | ||
26 | #include <../src/nep/impls/nepdefl.h> | ||
27 | #include "slp.h" | ||
28 | |||
29 | typedef struct { | ||
30 | NEP_EXT_OP extop; | ||
31 | Vec w; | ||
32 | } NEP_SLP_MATSHELL; | ||
33 | |||
34 | 308 | static PetscErrorCode NEPSetUp_SLP(NEP nep) | |
35 | { | ||
36 | 308 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
37 | 308 | PetscBool flg; | |
38 | 308 | ST st; | |
39 | |||
40 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
308 | PetscFunctionBegin; |
41 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
308 | if (nep->ncv!=PETSC_DETERMINE) PetscCall(PetscInfo(nep,"Setting ncv = nev, ignoring user-provided value\n")); |
42 | 308 | nep->ncv = nep->nev; | |
43 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
308 | if (nep->mpd!=PETSC_DETERMINE) PetscCall(PetscInfo(nep,"Setting mpd = nev, ignoring user-provided value\n")); |
44 | 308 | nep->mpd = nep->nev; | |
45 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
308 | PetscCheck(nep->ncv<=nep->nev+nep->mpd,PetscObjectComm((PetscObject)nep),PETSC_ERR_USER_INPUT,"The value of ncv must not be larger than nev+mpd"); |
46 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
308 | if (nep->max_it==PETSC_DETERMINE) nep->max_it = PetscMax(5000,2*nep->n/nep->ncv); |
47 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
308 | if (!nep->which) nep->which = NEP_TARGET_MAGNITUDE; |
48 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
308 | PetscCheck(nep->which==NEP_TARGET_MAGNITUDE,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"This solver supports only target magnitude eigenvalues"); |
49 |
6/10✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
308 | NEPCheckUnsupported(nep,NEP_FEATURE_REGION); |
50 | |||
51 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
308 | if (!ctx->eps) PetscCall(NEPSLPGetEPS(nep,&ctx->eps)); |
52 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
308 | PetscCall(EPSGetST(ctx->eps,&st)); |
53 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
308 | PetscCall(PetscObjectTypeCompareAny((PetscObject)st,&flg,STSINVERT,STCAYLEY,"")); |
54 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
308 | PetscCheck(!flg,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"SLP does not support spectral transformation"); |
55 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
308 | PetscCall(EPSSetDimensions(ctx->eps,1,PETSC_DECIDE,PETSC_DECIDE)); |
56 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
308 | PetscCall(EPSSetWhichEigenpairs(ctx->eps,EPS_LARGEST_MAGNITUDE)); |
57 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
466 | PetscCall(EPSSetTolerances(ctx->eps,SlepcDefaultTol(nep->tol)/10.0,nep->max_it)); |
58 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
308 | if (nep->tol==(PetscReal)PETSC_DETERMINE) nep->tol = SLEPC_DEFAULT_TOL; |
59 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
308 | if (ctx->deftol==(PetscReal)PETSC_DETERMINE) ctx->deftol = nep->tol; |
60 | |||
61 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
308 | if (nep->twosided) { |
62 | 50 | nep->ops->solve = NEPSolve_SLP_Twosided; | |
63 | 50 | nep->ops->computevectors = NULL; | |
64 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
50 | if (!ctx->epsts) PetscCall(NEPSLPGetEPSLeft(nep,&ctx->epsts)); |
65 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(EPSGetST(ctx->epsts,&st)); |
66 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(PetscObjectTypeCompareAny((PetscObject)st,&flg,STSINVERT,STCAYLEY,"")); |
67 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
50 | PetscCheck(!flg,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"SLP does not support spectral transformation"); |
68 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(EPSSetDimensions(ctx->epsts,1,PETSC_DECIDE,PETSC_DECIDE)); |
69 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(EPSSetWhichEigenpairs(ctx->epsts,EPS_LARGEST_MAGNITUDE)); |
70 |
6/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
50 | PetscCall(EPSSetTolerances(ctx->epsts,SlepcDefaultTol(nep->tol)/10.0,nep->max_it)); |
71 | } else { | ||
72 | 258 | nep->ops->solve = NEPSolve_SLP; | |
73 | 258 | nep->ops->computevectors = NEPComputeVectors_Schur; | |
74 | } | ||
75 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
308 | PetscCall(NEPAllocateSolution(nep,0)); |
76 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
59 | PetscFunctionReturn(PETSC_SUCCESS); |
77 | } | ||
78 | |||
79 | 14714 | static PetscErrorCode MatMult_SLP(Mat M,Vec x,Vec y) | |
80 | { | ||
81 | 14714 | NEP_SLP_MATSHELL *ctx; | |
82 | |||
83 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
14714 | PetscFunctionBegin; |
84 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
14714 | PetscCall(MatShellGetContext(M,&ctx)); |
85 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
14714 | PetscCall(MatMult(ctx->extop->MJ,x,ctx->w)); |
86 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
14714 | PetscCall(NEPDeflationFunctionSolve(ctx->extop,ctx->w,y)); |
87 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2811 | PetscFunctionReturn(PETSC_SUCCESS); |
88 | } | ||
89 | |||
90 | 258 | static PetscErrorCode MatDestroy_SLP(Mat M) | |
91 | { | ||
92 | 258 | NEP_SLP_MATSHELL *ctx; | |
93 | |||
94 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
258 | PetscFunctionBegin; |
95 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(MatShellGetContext(M,&ctx)); |
96 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(VecDestroy(&ctx->w)); |
97 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
258 | PetscCall(PetscFree(ctx)); |
98 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
49 | PetscFunctionReturn(PETSC_SUCCESS); |
99 | } | ||
100 | |||
101 | #if defined(PETSC_HAVE_CUDA) || defined(PETSC_HAVE_HIP) | ||
102 | 216 | static PetscErrorCode MatCreateVecs_SLP(Mat M,Vec *left,Vec *right) | |
103 | { | ||
104 | 216 | NEP_SLP_MATSHELL *ctx; | |
105 | |||
106 | 216 | PetscFunctionBegin; | |
107 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
216 | PetscCall(MatShellGetContext(M,&ctx)); |
108 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
216 | if (right) PetscCall(VecDuplicate(ctx->w,right)); |
109 |
2/4✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
|
216 | if (left) PetscCall(VecDuplicate(ctx->w,left)); |
110 | PetscFunctionReturn(PETSC_SUCCESS); | ||
111 | } | ||
112 | #endif | ||
113 | |||
114 | 914 | static PetscErrorCode NEPSLPSetUpLinearEP(NEP nep,NEP_EXT_OP extop,PetscScalar lambda,Vec u,PetscBool ini) | |
115 | { | ||
116 | 914 | NEP_SLP *slpctx = (NEP_SLP*)nep->data; | |
117 | 914 | Mat Mshell; | |
118 | 914 | PetscInt nloc,mloc; | |
119 | 914 | NEP_SLP_MATSHELL *shellctx; | |
120 | |||
121 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
914 | PetscFunctionBegin; |
122 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
914 | if (ini) { |
123 | /* Create mat shell */ | ||
124 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(PetscNew(&shellctx)); |
125 | 258 | shellctx->extop = extop; | |
126 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(NEPDeflationCreateVec(extop,&shellctx->w)); |
127 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(MatGetLocalSize(nep->function,&mloc,&nloc)); |
128 | 258 | nloc += extop->szd; mloc += extop->szd; | |
129 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(MatCreateShell(PetscObjectComm((PetscObject)nep),nloc,mloc,PETSC_DETERMINE,PETSC_DETERMINE,shellctx,&Mshell)); |
130 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(MatShellSetOperation(Mshell,MATOP_MULT,(PetscErrorCodeFn*)MatMult_SLP)); |
131 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(MatShellSetOperation(Mshell,MATOP_DESTROY,(PetscErrorCodeFn*)MatDestroy_SLP)); |
132 | #if defined(PETSC_HAVE_CUDA) || defined(PETSC_HAVE_HIP) | ||
133 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
106 | PetscCall(MatShellSetOperation(Mshell,MATOP_CREATE_VECS,(PetscErrorCodeFn*)MatCreateVecs_SLP)); |
134 | #endif | ||
135 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(EPSSetOperators(slpctx->eps,Mshell,NULL)); |
136 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(MatDestroy(&Mshell)); |
137 | } | ||
138 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
914 | PetscCall(NEPDeflationSolveSetUp(extop,lambda)); |
139 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
914 | PetscCall(NEPDeflationComputeJacobian(extop,lambda,NULL)); |
140 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
914 | PetscCall(EPSSetInitialSpace(slpctx->eps,1,&u)); |
141 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
171 | PetscFunctionReturn(PETSC_SUCCESS); |
142 | } | ||
143 | |||
144 | 258 | PetscErrorCode NEPSolve_SLP(NEP nep) | |
145 | { | ||
146 | 258 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
147 | 258 | Mat F,H,A; | |
148 | 258 | Vec uu,u,r; | |
149 | 258 | PetscScalar sigma,lambda,mu,im; | |
150 | 258 | PetscReal resnorm; | |
151 | 258 | PetscInt nconv; | |
152 | 258 | PetscBool skip=PETSC_FALSE,lock=PETSC_FALSE; | |
153 | 258 | NEP_EXT_OP extop=NULL; /* Extended operator for deflation */ | |
154 | |||
155 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
258 | PetscFunctionBegin; |
156 | /* get initial approximation of eigenvalue and eigenvector */ | ||
157 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(NEPGetDefaultShift(nep,&sigma)); |
158 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
258 | if (!nep->nini) PetscCall(BVSetRandomColumn(nep->V,0)); |
159 | 258 | lambda = sigma; | |
160 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
258 | if (!ctx->ksp) PetscCall(NEPSLPGetKSP(nep,&ctx->ksp)); |
161 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(NEPDeflationInitialize(nep,nep->V,ctx->ksp,PETSC_TRUE,nep->nev,&extop)); |
162 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(NEPDeflationCreateVec(extop,&u)); |
163 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(VecDuplicate(u,&r)); |
164 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(BVGetColumn(nep->V,0,&uu)); |
165 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(NEPDeflationCopyToExtendedVec(extop,uu,NULL,u,PETSC_FALSE)); |
166 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(BVRestoreColumn(nep->V,0,&uu)); |
167 | |||
168 | /* Restart loop */ | ||
169 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1626 | while (nep->reason == NEP_CONVERGED_ITERATING) { |
170 | 1368 | nep->its++; | |
171 | |||
172 | /* form residual, r = T(lambda)*u (used in convergence test only) */ | ||
173 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1368 | PetscCall(NEPDeflationComputeFunction(extop,lambda,&F)); |
174 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1368 | PetscCall(MatMult(F,u,r)); |
175 | |||
176 | /* convergence test */ | ||
177 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1368 | PetscCall(VecNorm(r,NORM_2,&resnorm)); |
178 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1368 | PetscCall((*nep->converged)(nep,lambda,0,resnorm,&nep->errest[nep->nconv],nep->convergedctx)); |
179 | 1368 | nep->eigr[nep->nconv] = lambda; | |
180 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
1368 | if (nep->errest[nep->nconv]<=nep->tol || nep->errest[nep->nconv]<=ctx->deftol) { |
181 |
4/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
|
454 | if (nep->errest[nep->nconv]<=ctx->deftol && !extop->ref && nep->nconv) { |
182 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(NEPDeflationExtractEigenpair(extop,nep->nconv,u,lambda,nep->ds)); |
183 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(NEPDeflationSetRefine(extop,PETSC_TRUE)); |
184 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(MatMult(F,u,r)); |
185 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(VecNorm(r,NORM_2,&resnorm)); |
186 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall((*nep->converged)(nep,lambda,0,resnorm,&nep->errest[nep->nconv],nep->convergedctx)); |
187 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
196 | if (nep->errest[nep->nconv]<=nep->tol) lock = PETSC_TRUE; |
188 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
258 | } else if (nep->errest[nep->nconv]<=nep->tol) lock = PETSC_TRUE; |
189 | } | ||
190 | |||
191 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
914 | if (lock) { |
192 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
454 | PetscCall(NEPDeflationSetRefine(extop,PETSC_FALSE)); |
193 | 454 | nep->nconv = nep->nconv + 1; | |
194 | 454 | skip = PETSC_TRUE; | |
195 | 454 | lock = PETSC_FALSE; | |
196 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
454 | PetscCall(NEPDeflationLocking(extop,u,lambda)); |
197 | } | ||
198 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1368 | PetscCall((*nep->stopping)(nep,nep->its,nep->max_it,nep->nconv,nep->nev,&nep->reason,nep->stoppingctx)); |
199 |
11/12✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1368 | if (!skip || nep->reason>0) PetscCall(NEPMonitor(nep,nep->its,nep->nconv,nep->eigr,nep->eigi,nep->errest,(nep->reason>0)?nep->nconv:nep->nconv+1)); |
200 | |||
201 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1368 | if (nep->reason == NEP_CONVERGED_ITERATING) { |
202 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1110 | if (!skip) { |
203 | /* evaluate T(lambda) and T'(lambda) */ | ||
204 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
914 | PetscCall(NEPSLPSetUpLinearEP(nep,extop,lambda,u,nep->its==1?PETSC_TRUE:PETSC_FALSE)); |
205 | /* compute new eigenvalue correction mu and eigenvector approximation u */ | ||
206 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
914 | PetscCall(EPSSolve(ctx->eps)); |
207 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
914 | PetscCall(EPSGetConverged(ctx->eps,&nconv)); |
208 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
914 | if (!nconv) { |
209 | ✗ | PetscCall(PetscInfo(nep,"iter=%" PetscInt_FMT ", inner iteration failed, stopping solve\n",nep->its)); | |
210 | ✗ | nep->reason = NEP_DIVERGED_LINEAR_SOLVE; | |
211 | ✗ | break; | |
212 | } | ||
213 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
914 | PetscCall(EPSGetEigenpair(ctx->eps,0,&mu,&im,u,NULL)); |
214 | 914 | mu = 1.0/mu; | |
215 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
914 | PetscCheck(PetscAbsScalar(im)<PETSC_MACHINE_EPSILON,PetscObjectComm((PetscObject)nep),PETSC_ERR_SUP,"Complex eigenvalue approximation - not implemented in real scalars"); |
216 | } else { | ||
217 | 196 | nep->its--; /* do not count this as a full iteration */ | |
218 | /* use second eigenpair computed in previous iteration */ | ||
219 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(EPSGetConverged(ctx->eps,&nconv)); |
220 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
196 | if (nconv>=2) { |
221 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(EPSGetEigenpair(ctx->eps,1,&mu,&im,u,NULL)); |
222 | 196 | mu = 1.0/mu; | |
223 | } else { | ||
224 | ✗ | PetscCall(NEPDeflationSetRandomVec(extop,u)); | |
225 | ✗ | mu = lambda-sigma; | |
226 | } | ||
227 | skip = PETSC_FALSE; | ||
228 | } | ||
229 | /* correct eigenvalue */ | ||
230 | 1110 | lambda = lambda - mu; | |
231 | } | ||
232 | } | ||
233 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(NEPDeflationGetInvariantPair(extop,NULL,&H)); |
234 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(DSSetType(nep->ds,DSNHEP)); |
235 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(DSAllocate(nep->ds,PetscMax(nep->nconv,1))); |
236 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(DSSetDimensions(nep->ds,nep->nconv,0,nep->nconv)); |
237 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(DSGetMat(nep->ds,DS_MAT_A,&A)); |
238 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(MatCopy(H,A,SAME_NONZERO_PATTERN)); |
239 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(DSRestoreMat(nep->ds,DS_MAT_A,&A)); |
240 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(MatDestroy(&H)); |
241 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(DSSolve(nep->ds,nep->eigr,nep->eigi)); |
242 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(NEPDeflationReset(extop)); |
243 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(VecDestroy(&u)); |
244 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258 | PetscCall(VecDestroy(&r)); |
245 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
49 | PetscFunctionReturn(PETSC_SUCCESS); |
246 | } | ||
247 | |||
248 | 268 | static PetscErrorCode NEPSetFromOptions_SLP(NEP nep,PetscOptionItems PetscOptionsObject) | |
249 | { | ||
250 | 268 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
251 | 268 | PetscBool flg; | |
252 | 268 | PetscReal r; | |
253 | |||
254 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
268 | PetscFunctionBegin; |
255 |
1/12✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
268 | PetscOptionsHeadBegin(PetscOptionsObject,"NEP SLP Options"); |
256 | |||
257 | 268 | r = 0.0; | |
258 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscOptionsReal("-nep_slp_deflation_threshold","Tolerance used as a threshold for including deflated eigenpairs","NEPSLPSetDeflationThreshold",ctx->deftol,&r,&flg)); |
259 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
268 | if (flg) PetscCall(NEPSLPSetDeflationThreshold(nep,r)); |
260 | |||
261 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
268 | PetscOptionsHeadEnd(); |
262 | |||
263 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
268 | if (!ctx->eps) PetscCall(NEPSLPGetEPS(nep,&ctx->eps)); |
264 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(EPSSetFromOptions(ctx->eps)); |
265 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
268 | if (nep->twosided) { |
266 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
50 | if (!ctx->epsts) PetscCall(NEPSLPGetEPSLeft(nep,&ctx->epsts)); |
267 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(EPSSetFromOptions(ctx->epsts)); |
268 | } | ||
269 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
268 | if (!ctx->ksp) PetscCall(NEPSLPGetKSP(nep,&ctx->ksp)); |
270 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(KSPSetFromOptions(ctx->ksp)); |
271 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
51 | PetscFunctionReturn(PETSC_SUCCESS); |
272 | } | ||
273 | |||
274 | 30 | static PetscErrorCode NEPSLPSetDeflationThreshold_SLP(NEP nep,PetscReal deftol) | |
275 | { | ||
276 | 30 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
277 | |||
278 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
279 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
30 | if (deftol == (PetscReal)PETSC_DEFAULT || deftol == (PetscReal)PETSC_DECIDE) { |
280 | ✗ | ctx->deftol = PETSC_DETERMINE; | |
281 | ✗ | nep->state = NEP_STATE_INITIAL; | |
282 | } else { | ||
283 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
30 | PetscCheck(deftol>0.0,PetscObjectComm((PetscObject)nep),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of deftol. Must be > 0"); |
284 | 30 | ctx->deftol = deftol; | |
285 | } | ||
286 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
287 | } | ||
288 | |||
289 | /*@ | ||
290 | NEPSLPSetDeflationThreshold - Sets the threshold value used to switch between | ||
291 | deflated and non-deflated iteration. | ||
292 | |||
293 | Logically Collective | ||
294 | |||
295 | Input Parameters: | ||
296 | + nep - nonlinear eigenvalue solver | ||
297 | - deftol - the threshold value | ||
298 | |||
299 | Options Database Keys: | ||
300 | . -nep_slp_deflation_threshold <deftol> - set the threshold | ||
301 | |||
302 | Notes: | ||
303 | Normally, the solver iterates on the extended problem in order to deflate | ||
304 | previously converged eigenpairs. If this threshold is set to a nonzero value, | ||
305 | then once the residual error is below this threshold the solver will | ||
306 | continue the iteration without deflation. The intention is to be able to | ||
307 | improve the current eigenpair further, despite having previous eigenpairs | ||
308 | with somewhat bad precision. | ||
309 | |||
310 | Level: advanced | ||
311 | |||
312 | .seealso: NEPSLPGetDeflationThreshold() | ||
313 | @*/ | ||
314 | 30 | PetscErrorCode NEPSLPSetDeflationThreshold(NEP nep,PetscReal deftol) | |
315 | { | ||
316 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
317 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
30 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
318 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
30 | PetscValidLogicalCollectiveReal(nep,deftol,2); |
319 |
8/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
30 | PetscTryMethod(nep,"NEPSLPSetDeflationThreshold_C",(NEP,PetscReal),(nep,deftol)); |
320 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
30 | PetscFunctionReturn(PETSC_SUCCESS); |
321 | } | ||
322 | |||
323 | 10 | static PetscErrorCode NEPSLPGetDeflationThreshold_SLP(NEP nep,PetscReal *deftol) | |
324 | { | ||
325 | 10 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
326 | |||
327 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
328 | 10 | *deftol = ctx->deftol; | |
329 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
10 | PetscFunctionReturn(PETSC_SUCCESS); |
330 | } | ||
331 | |||
332 | /*@ | ||
333 | NEPSLPGetDeflationThreshold - Returns the threshold value that controls deflation. | ||
334 | |||
335 | Not Collective | ||
336 | |||
337 | Input Parameter: | ||
338 | . nep - nonlinear eigenvalue solver | ||
339 | |||
340 | Output Parameter: | ||
341 | . deftol - the threshold | ||
342 | |||
343 | Level: advanced | ||
344 | |||
345 | .seealso: NEPSLPSetDeflationThreshold() | ||
346 | @*/ | ||
347 | 10 | PetscErrorCode NEPSLPGetDeflationThreshold(NEP nep,PetscReal *deftol) | |
348 | { | ||
349 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
350 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
10 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
351 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10 | PetscAssertPointer(deftol,2); |
352 |
9/16✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
10 | PetscUseMethod(nep,"NEPSLPGetDeflationThreshold_C",(NEP,PetscReal*),(nep,deftol)); |
353 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
10 | PetscFunctionReturn(PETSC_SUCCESS); |
354 | } | ||
355 | |||
356 | 20 | static PetscErrorCode NEPSLPSetEPS_SLP(NEP nep,EPS eps) | |
357 | { | ||
358 | 20 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
359 | |||
360 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
361 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscObjectReference((PetscObject)eps)); |
362 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(EPSDestroy(&ctx->eps)); |
363 | 20 | ctx->eps = eps; | |
364 | 20 | nep->state = NEP_STATE_INITIAL; | |
365 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
366 | } | ||
367 | |||
368 | /*@ | ||
369 | NEPSLPSetEPS - Associate a linear eigensolver object (EPS) to the | ||
370 | nonlinear eigenvalue solver. | ||
371 | |||
372 | Collective | ||
373 | |||
374 | Input Parameters: | ||
375 | + nep - nonlinear eigenvalue solver | ||
376 | - eps - the eigensolver object | ||
377 | |||
378 | Level: advanced | ||
379 | |||
380 | .seealso: NEPSLPGetEPS() | ||
381 | @*/ | ||
382 | 20 | PetscErrorCode NEPSLPSetEPS(NEP nep,EPS eps) | |
383 | { | ||
384 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
385 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
20 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
386 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
20 | PetscValidHeaderSpecific(eps,EPS_CLASSID,2); |
387 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
20 | PetscCheckSameComm(nep,1,eps,2); |
388 |
8/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
20 | PetscTryMethod(nep,"NEPSLPSetEPS_C",(NEP,EPS),(nep,eps)); |
389 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
390 | } | ||
391 | |||
392 | 248 | static PetscErrorCode NEPSLPGetEPS_SLP(NEP nep,EPS *eps) | |
393 | { | ||
394 | 248 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
395 | |||
396 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
248 | PetscFunctionBegin; |
397 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
248 | if (!ctx->eps) { |
398 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(EPSCreate(PetscObjectComm((PetscObject)nep),&ctx->eps)); |
399 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)ctx->eps,(PetscObject)nep,1)); |
400 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(EPSSetOptionsPrefix(ctx->eps,((PetscObject)nep)->prefix)); |
401 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(EPSAppendOptionsPrefix(ctx->eps,"nep_slp_")); |
402 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(PetscObjectSetOptions((PetscObject)ctx->eps,((PetscObject)nep)->options)); |
403 | } | ||
404 | 248 | *eps = ctx->eps; | |
405 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
248 | PetscFunctionReturn(PETSC_SUCCESS); |
406 | } | ||
407 | |||
408 | /*@ | ||
409 | NEPSLPGetEPS - Retrieve the linear eigensolver object (EPS) associated | ||
410 | to the nonlinear eigenvalue solver. | ||
411 | |||
412 | Collective | ||
413 | |||
414 | Input Parameter: | ||
415 | . nep - nonlinear eigenvalue solver | ||
416 | |||
417 | Output Parameter: | ||
418 | . eps - the eigensolver object | ||
419 | |||
420 | Level: advanced | ||
421 | |||
422 | .seealso: NEPSLPSetEPS() | ||
423 | @*/ | ||
424 | 248 | PetscErrorCode NEPSLPGetEPS(NEP nep,EPS *eps) | |
425 | { | ||
426 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
248 | PetscFunctionBegin; |
427 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
248 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
428 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
248 | PetscAssertPointer(eps,2); |
429 |
9/16✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
248 | PetscUseMethod(nep,"NEPSLPGetEPS_C",(NEP,EPS*),(nep,eps)); |
430 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
248 | PetscFunctionReturn(PETSC_SUCCESS); |
431 | } | ||
432 | |||
433 | ✗ | static PetscErrorCode NEPSLPSetEPSLeft_SLP(NEP nep,EPS eps) | |
434 | { | ||
435 | ✗ | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
436 | |||
437 | ✗ | PetscFunctionBegin; | |
438 | ✗ | PetscCall(PetscObjectReference((PetscObject)eps)); | |
439 | ✗ | PetscCall(EPSDestroy(&ctx->epsts)); | |
440 | ✗ | ctx->epsts = eps; | |
441 | ✗ | nep->state = NEP_STATE_INITIAL; | |
442 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
443 | } | ||
444 | |||
445 | /*@ | ||
446 | NEPSLPSetEPSLeft - Associate a linear eigensolver object (EPS) to the | ||
447 | nonlinear eigenvalue solver, used to compute left eigenvectors in the | ||
448 | two-sided variant of SLP. | ||
449 | |||
450 | Collective | ||
451 | |||
452 | Input Parameters: | ||
453 | + nep - nonlinear eigenvalue solver | ||
454 | - eps - the eigensolver object | ||
455 | |||
456 | Level: advanced | ||
457 | |||
458 | .seealso: NEPSLPGetEPSLeft(), NEPSetTwoSided() | ||
459 | @*/ | ||
460 | ✗ | PetscErrorCode NEPSLPSetEPSLeft(NEP nep,EPS eps) | |
461 | { | ||
462 | ✗ | PetscFunctionBegin; | |
463 | ✗ | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); | |
464 | ✗ | PetscValidHeaderSpecific(eps,EPS_CLASSID,2); | |
465 | ✗ | PetscCheckSameComm(nep,1,eps,2); | |
466 | ✗ | PetscTryMethod(nep,"NEPSLPSetEPSLeft_C",(NEP,EPS),(nep,eps)); | |
467 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
468 | } | ||
469 | |||
470 | 50 | static PetscErrorCode NEPSLPGetEPSLeft_SLP(NEP nep,EPS *eps) | |
471 | { | ||
472 | 50 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
473 | |||
474 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50 | PetscFunctionBegin; |
475 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
50 | if (!ctx->epsts) { |
476 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(EPSCreate(PetscObjectComm((PetscObject)nep),&ctx->epsts)); |
477 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)ctx->epsts,(PetscObject)nep,1)); |
478 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(EPSSetOptionsPrefix(ctx->epsts,((PetscObject)nep)->prefix)); |
479 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(EPSAppendOptionsPrefix(ctx->epsts,"nep_slp_left_")); |
480 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(PetscObjectSetOptions((PetscObject)ctx->epsts,((PetscObject)nep)->options)); |
481 | } | ||
482 | 50 | *eps = ctx->epsts; | |
483 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
50 | PetscFunctionReturn(PETSC_SUCCESS); |
484 | } | ||
485 | |||
486 | /*@ | ||
487 | NEPSLPGetEPSLeft - Retrieve the linear eigensolver object (EPS) associated | ||
488 | to the nonlinear eigenvalue solver, used to compute left eigenvectors in the | ||
489 | two-sided variant of SLP. | ||
490 | |||
491 | Collective | ||
492 | |||
493 | Input Parameter: | ||
494 | . nep - nonlinear eigenvalue solver | ||
495 | |||
496 | Output Parameter: | ||
497 | . eps - the eigensolver object | ||
498 | |||
499 | Level: advanced | ||
500 | |||
501 | .seealso: NEPSLPSetEPSLeft(), NEPSetTwoSided() | ||
502 | @*/ | ||
503 | 50 | PetscErrorCode NEPSLPGetEPSLeft(NEP nep,EPS *eps) | |
504 | { | ||
505 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50 | PetscFunctionBegin; |
506 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
50 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
507 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
50 | PetscAssertPointer(eps,2); |
508 |
9/16✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
50 | PetscUseMethod(nep,"NEPSLPGetEPSLeft_C",(NEP,EPS*),(nep,eps)); |
509 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
50 | PetscFunctionReturn(PETSC_SUCCESS); |
510 | } | ||
511 | |||
512 | 20 | static PetscErrorCode NEPSLPSetKSP_SLP(NEP nep,KSP ksp) | |
513 | { | ||
514 | 20 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
515 | |||
516 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
517 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscObjectReference((PetscObject)ksp)); |
518 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(KSPDestroy(&ctx->ksp)); |
519 | 20 | ctx->ksp = ksp; | |
520 | 20 | nep->state = NEP_STATE_INITIAL; | |
521 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
522 | } | ||
523 | |||
524 | /*@ | ||
525 | NEPSLPSetKSP - Associate a linear solver object (KSP) to the nonlinear | ||
526 | eigenvalue solver. | ||
527 | |||
528 | Collective | ||
529 | |||
530 | Input Parameters: | ||
531 | + nep - eigenvalue solver | ||
532 | - ksp - the linear solver object | ||
533 | |||
534 | Level: advanced | ||
535 | |||
536 | .seealso: NEPSLPGetKSP() | ||
537 | @*/ | ||
538 | 20 | PetscErrorCode NEPSLPSetKSP(NEP nep,KSP ksp) | |
539 | { | ||
540 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
541 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
20 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
542 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
20 | PetscValidHeaderSpecific(ksp,KSP_CLASSID,2); |
543 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
20 | PetscCheckSameComm(nep,1,ksp,2); |
544 |
8/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
20 | PetscTryMethod(nep,"NEPSLPSetKSP_C",(NEP,KSP),(nep,ksp)); |
545 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
546 | } | ||
547 | |||
548 | 248 | static PetscErrorCode NEPSLPGetKSP_SLP(NEP nep,KSP *ksp) | |
549 | { | ||
550 | 248 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
551 | |||
552 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
248 | PetscFunctionBegin; |
553 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
248 | if (!ctx->ksp) { |
554 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(KSPCreate(PetscObjectComm((PetscObject)nep),&ctx->ksp)); |
555 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)ctx->ksp,(PetscObject)nep,1)); |
556 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(KSPSetOptionsPrefix(ctx->ksp,((PetscObject)nep)->prefix)); |
557 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(KSPAppendOptionsPrefix(ctx->ksp,"nep_slp_")); |
558 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(PetscObjectSetOptions((PetscObject)ctx->ksp,((PetscObject)nep)->options)); |
559 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(KSPSetErrorIfNotConverged(ctx->ksp,PETSC_TRUE)); |
560 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
386 | PetscCall(KSPSetTolerances(ctx->ksp,SlepcDefaultTol(nep->tol),PETSC_CURRENT,PETSC_CURRENT,PETSC_CURRENT)); |
561 | } | ||
562 | 248 | *ksp = ctx->ksp; | |
563 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
248 | PetscFunctionReturn(PETSC_SUCCESS); |
564 | } | ||
565 | |||
566 | /*@ | ||
567 | NEPSLPGetKSP - Retrieve the linear solver object (KSP) associated with | ||
568 | the nonlinear eigenvalue solver. | ||
569 | |||
570 | Collective | ||
571 | |||
572 | Input Parameter: | ||
573 | . nep - nonlinear eigenvalue solver | ||
574 | |||
575 | Output Parameter: | ||
576 | . ksp - the linear solver object | ||
577 | |||
578 | Level: advanced | ||
579 | |||
580 | .seealso: NEPSLPSetKSP() | ||
581 | @*/ | ||
582 | 248 | PetscErrorCode NEPSLPGetKSP(NEP nep,KSP *ksp) | |
583 | { | ||
584 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
248 | PetscFunctionBegin; |
585 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
248 | PetscValidHeaderSpecific(nep,NEP_CLASSID,1); |
586 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
248 | PetscAssertPointer(ksp,2); |
587 |
9/16✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
248 | PetscUseMethod(nep,"NEPSLPGetKSP_C",(NEP,KSP*),(nep,ksp)); |
588 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
248 | PetscFunctionReturn(PETSC_SUCCESS); |
589 | } | ||
590 | |||
591 | 10 | static PetscErrorCode NEPView_SLP(NEP nep,PetscViewer viewer) | |
592 | { | ||
593 | 10 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
594 | 10 | PetscBool isascii; | |
595 | |||
596 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
597 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
598 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (isascii) { |
599 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
10 | if (ctx->deftol) PetscCall(PetscViewerASCIIPrintf(viewer," deflation threshold: %g\n",(double)ctx->deftol)); |
600 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10 | if (!ctx->eps) PetscCall(NEPSLPGetEPS(nep,&ctx->eps)); |
601 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerASCIIPushTab(viewer)); |
602 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(EPSView(ctx->eps,viewer)); |
603 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (nep->twosided) { |
604 | ✗ | if (!ctx->epsts) PetscCall(NEPSLPGetEPSLeft(nep,&ctx->epsts)); | |
605 | ✗ | PetscCall(EPSView(ctx->epsts,viewer)); | |
606 | } | ||
607 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10 | if (!ctx->ksp) PetscCall(NEPSLPGetKSP(nep,&ctx->ksp)); |
608 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(KSPView(ctx->ksp,viewer)); |
609 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerASCIIPopTab(viewer)); |
610 | } | ||
611 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
612 | } | ||
613 | |||
614 | 308 | static PetscErrorCode NEPReset_SLP(NEP nep) | |
615 | { | ||
616 | 308 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
617 | |||
618 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
308 | PetscFunctionBegin; |
619 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
308 | PetscCall(EPSReset(ctx->eps)); |
620 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
308 | if (nep->twosided) PetscCall(EPSReset(ctx->epsts)); |
621 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
308 | PetscCall(KSPReset(ctx->ksp)); |
622 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
59 | PetscFunctionReturn(PETSC_SUCCESS); |
623 | } | ||
624 | |||
625 | 268 | static PetscErrorCode NEPDestroy_SLP(NEP nep) | |
626 | { | ||
627 | 268 | NEP_SLP *ctx = (NEP_SLP*)nep->data; | |
628 | |||
629 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
268 | PetscFunctionBegin; |
630 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(KSPDestroy(&ctx->ksp)); |
631 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(EPSDestroy(&ctx->eps)); |
632 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(EPSDestroy(&ctx->epsts)); |
633 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
268 | PetscCall(PetscFree(nep->data)); |
634 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPSetDeflationThreshold_C",NULL)); |
635 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPGetDeflationThreshold_C",NULL)); |
636 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPSetEPS_C",NULL)); |
637 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPGetEPS_C",NULL)); |
638 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPSetEPSLeft_C",NULL)); |
639 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPGetEPSLeft_C",NULL)); |
640 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPSetKSP_C",NULL)); |
641 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPGetKSP_C",NULL)); |
642 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
51 | PetscFunctionReturn(PETSC_SUCCESS); |
643 | } | ||
644 | |||
645 | 268 | SLEPC_EXTERN PetscErrorCode NEPCreate_SLP(NEP nep) | |
646 | { | ||
647 | 268 | NEP_SLP *ctx; | |
648 | |||
649 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
268 | PetscFunctionBegin; |
650 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscNew(&ctx)); |
651 | 268 | nep->data = (void*)ctx; | |
652 | |||
653 | 268 | nep->useds = PETSC_TRUE; | |
654 | 268 | ctx->deftol = PETSC_DETERMINE; | |
655 | |||
656 | 268 | nep->ops->solve = NEPSolve_SLP; | |
657 | 268 | nep->ops->setup = NEPSetUp_SLP; | |
658 | 268 | nep->ops->setfromoptions = NEPSetFromOptions_SLP; | |
659 | 268 | nep->ops->reset = NEPReset_SLP; | |
660 | 268 | nep->ops->destroy = NEPDestroy_SLP; | |
661 | 268 | nep->ops->view = NEPView_SLP; | |
662 | 268 | nep->ops->computevectors = NEPComputeVectors_Schur; | |
663 | |||
664 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPSetDeflationThreshold_C",NEPSLPSetDeflationThreshold_SLP)); |
665 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPGetDeflationThreshold_C",NEPSLPGetDeflationThreshold_SLP)); |
666 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPSetEPS_C",NEPSLPSetEPS_SLP)); |
667 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPGetEPS_C",NEPSLPGetEPS_SLP)); |
668 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPSetEPSLeft_C",NEPSLPSetEPSLeft_SLP)); |
669 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPGetEPSLeft_C",NEPSLPGetEPSLeft_SLP)); |
670 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPSetKSP_C",NEPSLPSetKSP_SLP)); |
671 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
268 | PetscCall(PetscObjectComposeFunction((PetscObject)nep,"NEPSLPGetKSP_C",NEPSLPGetKSP_SLP)); |
672 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
51 | PetscFunctionReturn(PETSC_SUCCESS); |
673 | } | ||
674 |