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 - Sets the number of integration points | ||
571 | . -nep_ciss_blocksize - Sets the block size | ||
572 | . -nep_ciss_moments - Sets the moment size | ||
573 | . -nep_ciss_partitions - Sets the number of partitions | ||
574 | . -nep_ciss_maxblocksize - 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 true when T(.) 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 true, the solver avoids some computations. | ||
588 | |||
589 | Level: advanced | ||
590 | |||
591 | .seealso: NEPCISSGetSizes() | ||
592 | @*/ | ||
593 | 190 | PetscErrorCode NEPCISSSetSizes(NEP nep,PetscInt ip,PetscInt bs,PetscInt ms,PetscInt npart,PetscInt bsmax,PetscBool realmats) | |
594 | { | ||
595 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
190 | PetscFunctionBegin; |
596 |
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); |
597 |
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); |
598 |
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); |
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,ms,4); |
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,npart,5); |
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,bsmax,6); |
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 | PetscValidLogicalCollectiveBool(nep,realmats,7); |
603 |
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)); |
604 |
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); |
605 | } | ||
606 | |||
607 | 187 | static PetscErrorCode NEPCISSGetSizes_CISS(NEP nep,PetscInt *ip,PetscInt *bs,PetscInt *ms,PetscInt *npart,PetscInt *bsmax,PetscBool *realmats) | |
608 | { | ||
609 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
610 | |||
611 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
612 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (ip) *ip = ctx->N; |
613 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (bs) *bs = ctx->L; |
614 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (ms) *ms = ctx->M; |
615 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (npart) *npart = ctx->npart; |
616 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (bsmax) *bsmax = ctx->L_max; |
617 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (realmats) *realmats = ctx->isreal; |
618 |
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); |
619 | } | ||
620 | |||
621 | /*@ | ||
622 | NEPCISSGetSizes - Gets the values of various size parameters in the CISS solver. | ||
623 | |||
624 | Not Collective | ||
625 | |||
626 | Input Parameter: | ||
627 | . nep - the nonlinear eigensolver context | ||
628 | |||
629 | Output Parameters: | ||
630 | + ip - number of integration points | ||
631 | . bs - block size | ||
632 | . ms - moment size | ||
633 | . npart - number of partitions when splitting the communicator | ||
634 | . bsmax - max block size | ||
635 | - realmats - T(z) is real for real z | ||
636 | |||
637 | Level: advanced | ||
638 | |||
639 | .seealso: NEPCISSSetSizes() | ||
640 | @*/ | ||
641 | 187 | PetscErrorCode NEPCISSGetSizes(NEP nep,PetscInt *ip,PetscInt *bs,PetscInt *ms,PetscInt *npart,PetscInt *bsmax,PetscBool *realmats) | |
642 | { | ||
643 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
644 |
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); |
645 |
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)); |
646 |
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); |
647 | } | ||
648 | |||
649 | 15 | static PetscErrorCode NEPCISSSetThreshold_CISS(NEP nep,PetscReal delta,PetscReal spur) | |
650 | { | ||
651 | 15 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
652 | |||
653 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
654 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (delta == (PetscReal)PETSC_DETERMINE) { |
655 | ✗ | ctx->delta = SLEPC_DEFAULT_TOL*1e-4; | |
656 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (delta != (PetscReal)PETSC_CURRENT) { |
657 |
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"); |
658 | 15 | ctx->delta = delta; | |
659 | } | ||
660 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (spur == (PetscReal)PETSC_DETERMINE) { |
661 | ✗ | ctx->spurious_threshold = PetscSqrtReal(SLEPC_DEFAULT_TOL); | |
662 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (spur != (PetscReal)PETSC_CURRENT) { |
663 |
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"); |
664 | 15 | ctx->spurious_threshold = spur; | |
665 | } | ||
666 |
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); |
667 | } | ||
668 | |||
669 | /*@ | ||
670 | NEPCISSSetThreshold - Sets the values of various threshold parameters in | ||
671 | the CISS solver. | ||
672 | |||
673 | Logically Collective | ||
674 | |||
675 | Input Parameters: | ||
676 | + nep - the nonlinear eigensolver context | ||
677 | . delta - threshold for numerical rank | ||
678 | - spur - spurious threshold (to discard spurious eigenpairs) | ||
679 | |||
680 | Options Database Keys: | ||
681 | + -nep_ciss_delta - Sets the delta | ||
682 | - -nep_ciss_spurious_threshold - Sets the spurious threshold | ||
683 | |||
684 | Note: | ||
685 | PETSC_CURRENT can be used to preserve the current value of any of the | ||
686 | arguments, and PETSC_DETERMINE to set them to a default value. | ||
687 | |||
688 | Level: advanced | ||
689 | |||
690 | .seealso: NEPCISSGetThreshold() | ||
691 | @*/ | ||
692 | 15 | PetscErrorCode NEPCISSSetThreshold(NEP nep,PetscReal delta,PetscReal spur) | |
693 | { | ||
694 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
695 |
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); |
696 |
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); |
697 |
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); |
698 |
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)); |
699 |
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); |
700 | } | ||
701 | |||
702 | 187 | static PetscErrorCode NEPCISSGetThreshold_CISS(NEP nep,PetscReal *delta,PetscReal *spur) | |
703 | { | ||
704 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
705 | |||
706 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
707 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (delta) *delta = ctx->delta; |
708 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (spur) *spur = ctx->spurious_threshold; |
709 |
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); |
710 | } | ||
711 | |||
712 | /*@ | ||
713 | NEPCISSGetThreshold - Gets the values of various threshold parameters in | ||
714 | the CISS solver. | ||
715 | |||
716 | Not Collective | ||
717 | |||
718 | Input Parameter: | ||
719 | . nep - the nonlinear eigensolver context | ||
720 | |||
721 | Output Parameters: | ||
722 | + delta - threshold for numerical rank | ||
723 | - spur - spurious threshold (to discard spurious eigenpairs) | ||
724 | |||
725 | Level: advanced | ||
726 | |||
727 | .seealso: NEPCISSSetThreshold() | ||
728 | @*/ | ||
729 | 187 | PetscErrorCode NEPCISSGetThreshold(NEP nep,PetscReal *delta,PetscReal *spur) | |
730 | { | ||
731 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
732 |
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); |
733 |
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)); |
734 |
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); |
735 | } | ||
736 | |||
737 | 15 | static PetscErrorCode NEPCISSSetRefinement_CISS(NEP nep,PetscInt inner,PetscInt blsize) | |
738 | { | ||
739 | 15 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
740 | |||
741 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
742 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (inner == PETSC_DETERMINE) { |
743 | ✗ | ctx->refine_inner = 0; | |
744 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (inner != PETSC_CURRENT) { |
745 |
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"); |
746 | 15 | ctx->refine_inner = inner; | |
747 | } | ||
748 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (blsize == PETSC_DETERMINE) { |
749 | ✗ | ctx->refine_blocksize = 0; | |
750 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (blsize != PETSC_CURRENT) { |
751 |
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"); |
752 | 15 | ctx->refine_blocksize = blsize; | |
753 | } | ||
754 |
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); |
755 | } | ||
756 | |||
757 | /*@ | ||
758 | NEPCISSSetRefinement - Sets the values of various refinement parameters | ||
759 | in the CISS solver. | ||
760 | |||
761 | Logically Collective | ||
762 | |||
763 | Input Parameters: | ||
764 | + nep - the nonlinear eigensolver context | ||
765 | . inner - number of iterative refinement iterations (inner loop) | ||
766 | - blsize - number of iterative refinement iterations (blocksize loop) | ||
767 | |||
768 | Options Database Keys: | ||
769 | + -nep_ciss_refine_inner - Sets number of inner iterations | ||
770 | - -nep_ciss_refine_blocksize - Sets number of blocksize iterations | ||
771 | |||
772 | Note: | ||
773 | PETSC_CURRENT can be used to preserve the current value of any of the | ||
774 | arguments, and PETSC_DETERMINE to set them to a default value. | ||
775 | |||
776 | Level: advanced | ||
777 | |||
778 | .seealso: NEPCISSGetRefinement() | ||
779 | @*/ | ||
780 | 15 | PetscErrorCode NEPCISSSetRefinement(NEP nep,PetscInt inner,PetscInt blsize) | |
781 | { | ||
782 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
783 |
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); |
784 |
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); |
785 |
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); |
786 |
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)); |
787 |
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); |
788 | } | ||
789 | |||
790 | 187 | static PetscErrorCode NEPCISSGetRefinement_CISS(NEP nep,PetscInt *inner,PetscInt *blsize) | |
791 | { | ||
792 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
793 | |||
794 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
795 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (inner) *inner = ctx->refine_inner; |
796 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
187 | if (blsize) *blsize = ctx->refine_blocksize; |
797 |
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); |
798 | } | ||
799 | |||
800 | /*@ | ||
801 | NEPCISSGetRefinement - Gets the values of various refinement parameters | ||
802 | in the CISS solver. | ||
803 | |||
804 | Not Collective | ||
805 | |||
806 | Input Parameter: | ||
807 | . nep - the nonlinear eigensolver context | ||
808 | |||
809 | Output Parameters: | ||
810 | + inner - number of iterative refinement iterations (inner loop) | ||
811 | - blsize - number of iterative refinement iterations (blocksize loop) | ||
812 | |||
813 | Level: advanced | ||
814 | |||
815 | .seealso: NEPCISSSetRefinement() | ||
816 | @*/ | ||
817 | 187 | PetscErrorCode NEPCISSGetRefinement(NEP nep, PetscInt *inner, PetscInt *blsize) | |
818 | { | ||
819 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
820 |
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); |
821 |
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)); |
822 |
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); |
823 | } | ||
824 | |||
825 | 120 | static PetscErrorCode NEPCISSSetExtraction_CISS(NEP nep,NEPCISSExtraction extraction) | |
826 | { | ||
827 | 120 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
828 | |||
829 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
120 | PetscFunctionBegin; |
830 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
120 | if (ctx->extraction != extraction) { |
831 | 80 | ctx->extraction = extraction; | |
832 | 80 | nep->state = NEP_STATE_INITIAL; | |
833 | } | ||
834 |
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); |
835 | } | ||
836 | |||
837 | /*@ | ||
838 | NEPCISSSetExtraction - Sets the extraction technique used in the CISS solver. | ||
839 | |||
840 | Logically Collective | ||
841 | |||
842 | Input Parameters: | ||
843 | + nep - the nonlinear eigensolver context | ||
844 | - extraction - the extraction technique | ||
845 | |||
846 | Options Database Key: | ||
847 | . -nep_ciss_extraction - Sets the extraction technique (either 'ritz', 'hankel' or 'caa') | ||
848 | |||
849 | Notes: | ||
850 | By default, the Rayleigh-Ritz extraction is used (NEP_CISS_EXTRACTION_RITZ). | ||
851 | |||
852 | If the 'hankel' or the 'caa' option is specified (NEP_CISS_EXTRACTION_HANKEL or | ||
853 | NEP_CISS_EXTRACTION_CAA), then the Block Hankel method, or the Communication-avoiding | ||
854 | Arnoldi method, respectively, is used for extracting eigenpairs. | ||
855 | |||
856 | Level: advanced | ||
857 | |||
858 | .seealso: NEPCISSGetExtraction(), NEPCISSExtraction | ||
859 | @*/ | ||
860 | 120 | PetscErrorCode NEPCISSSetExtraction(NEP nep,NEPCISSExtraction extraction) | |
861 | { | ||
862 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
120 | PetscFunctionBegin; |
863 |
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); |
864 |
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); |
865 |
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)); |
866 |
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); |
867 | } | ||
868 | |||
869 | 65 | static PetscErrorCode NEPCISSGetExtraction_CISS(NEP nep,NEPCISSExtraction *extraction) | |
870 | { | ||
871 | 65 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
872 | |||
873 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
874 | 65 | *extraction = ctx->extraction; | |
875 |
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); |
876 | } | ||
877 | |||
878 | /*@ | ||
879 | NEPCISSGetExtraction - Gets the extraction technique used in the CISS solver. | ||
880 | |||
881 | Not Collective | ||
882 | |||
883 | Input Parameter: | ||
884 | . nep - the nonlinear eigensolver context | ||
885 | |||
886 | Output Parameters: | ||
887 | . extraction - extraction technique | ||
888 | |||
889 | Level: advanced | ||
890 | |||
891 | .seealso: NEPCISSSetExtraction() NEPCISSExtraction | ||
892 | @*/ | ||
893 | 65 | PetscErrorCode NEPCISSGetExtraction(NEP nep,NEPCISSExtraction *extraction) | |
894 | { | ||
895 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
896 |
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); |
897 |
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); |
898 |
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)); |
899 |
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); |
900 | } | ||
901 | |||
902 | 217 | static PetscErrorCode NEPCISSGetKSPs_CISS(NEP nep,PetscInt *nsolve,KSP **ksp) | |
903 | { | ||
904 | 217 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
905 | 217 | SlepcContourData contour; | |
906 | 217 | PetscInt i; | |
907 | 217 | PC pc; | |
908 | 217 | MPI_Comm child; | |
909 | |||
910 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
217 | PetscFunctionBegin; |
911 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
217 | if (!ctx->contour) { /* initialize contour data structure first */ |
912 |
4/6✓ Branch 0 taken 1 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)); |
913 |
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)); |
914 | } | ||
915 | 217 | contour = ctx->contour; | |
916 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
217 | if (!contour->ksp) { |
917 |
4/6✓ Branch 0 taken 1 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)); |
918 |
4/6✓ Branch 0 taken 1 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)); |
919 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4281 | for (i=0;i<contour->npoints;i++) { |
920 |
4/6✓ Branch 0 taken 1 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])); |
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.
|
4064 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)contour->ksp[i],(PetscObject)nep,1)); |
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.
|
4064 | PetscCall(KSPSetOptionsPrefix(contour->ksp[i],((PetscObject)nep)->prefix)); |
923 |
4/6✓ Branch 0 taken 1 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_")); |
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(PetscObjectSetOptions((PetscObject)contour->ksp[i],((PetscObject)nep)->options)); |
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(KSPSetErrorIfNotConverged(contour->ksp[i],PETSC_TRUE)); |
926 |
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)); |
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(KSPGetPC(contour->ksp[i],&pc)); |
928 |
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)) { |
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.
|
480 | PetscCall(KSPSetType(contour->ksp[i],KSPBCGS)); |
930 |
4/6✓ Branch 0 taken 1 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)); |
931 | } else { | ||
932 |
4/6✓ Branch 0 taken 1 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)); |
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.
|
4064 | PetscCall(PCSetType(pc,PCLU)); |
934 | } | ||
935 | } | ||
936 | } | ||
937 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
217 | if (nsolve) *nsolve = contour->npoints; |
938 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
217 | if (ksp) *ksp = contour->ksp; |
939 |
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); |
940 | } | ||
941 | |||
942 | /*@C | ||
943 | NEPCISSGetKSPs - Retrieve the array of linear solver objects associated with | ||
944 | the CISS solver. | ||
945 | |||
946 | Collective | ||
947 | |||
948 | Input Parameter: | ||
949 | . nep - nonlinear eigenvalue solver | ||
950 | |||
951 | Output Parameters: | ||
952 | + nsolve - number of solver objects | ||
953 | - ksp - array of linear solver object | ||
954 | |||
955 | Notes: | ||
956 | The number of KSP solvers is equal to the number of integration points divided by | ||
957 | the number of partitions. This value is halved in the case of real matrices with | ||
958 | a region centered at the real axis. | ||
959 | |||
960 | Level: advanced | ||
961 | |||
962 | .seealso: NEPCISSSetSizes() | ||
963 | @*/ | ||
964 | 217 | PetscErrorCode NEPCISSGetKSPs(NEP nep,PetscInt *nsolve,KSP **ksp) | |
965 | { | ||
966 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
217 | PetscFunctionBegin; |
967 |
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); |
968 |
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)); |
969 |
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); |
970 | } | ||
971 | |||
972 | 197 | static PetscErrorCode NEPReset_CISS(NEP nep) | |
973 | { | ||
974 | 197 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
975 | |||
976 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
197 | PetscFunctionBegin; |
977 |
4/6✓ Branch 0 taken 1 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)); |
978 |
4/6✓ Branch 0 taken 1 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)); |
979 |
4/6✓ Branch 0 taken 1 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)); |
980 |
4/6✓ Branch 0 taken 1 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)); |
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(MatDestroy(&ctx->J)); |
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->pV)); |
983 |
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)); |
984 |
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); |
985 | } | ||
986 | |||
987 | 187 | static PetscErrorCode NEPSetFromOptions_CISS(NEP nep,PetscOptionItems PetscOptionsObject) | |
988 | { | ||
989 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
990 | 187 | PetscReal r1,r2; | |
991 | 187 | PetscInt i,i1,i2,i3,i4,i5,i6,i7; | |
992 | 187 | PetscBool b1,flg,flg2,flg3,flg4,flg5,flg6; | |
993 | 187 | NEPCISSExtraction extraction; | |
994 | |||
995 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
996 |
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"); |
997 | |||
998 |
4/6✓ Branch 0 taken 1 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)); |
999 |
4/6✓ Branch 0 taken 1 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)); |
1000 |
4/6✓ Branch 0 taken 1 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)); |
1001 |
4/6✓ Branch 0 taken 1 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)); |
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(PetscOptionsInt("-nep_ciss_partitions","Number of partitions","NEPCISSSetSizes",i4,&i4,&flg4)); |
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_maxblocksize","Maximum block size","NEPCISSSetSizes",i5,&i5,&flg5)); |
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(PetscOptionsBool("-nep_ciss_realmats","True if T(z) is real for real z","NEPCISSSetSizes",b1,&b1,&flg6)); |
1005 |
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)); |
1006 | |||
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(NEPCISSGetThreshold(nep,&r1,&r2)); |
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(PetscOptionsReal("-nep_ciss_delta","Threshold for numerical rank","NEPCISSSetThreshold",r1,&r1,&flg)); |
1009 |
4/6✓ Branch 0 taken 1 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)); |
1010 |
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)); |
1011 | |||
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(NEPCISSGetRefinement(nep,&i6,&i7)); |
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(PetscOptionsInt("-nep_ciss_refine_inner","Number of inner iterative refinement iterations","NEPCISSSetRefinement",i6,&i6,&flg)); |
1014 |
4/6✓ Branch 0 taken 1 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)); |
1015 |
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)); |
1016 | |||
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(PetscOptionsEnum("-nep_ciss_extraction","Extraction technique","NEPCISSSetExtraction",NEPCISSExtractions,(PetscEnum)ctx->extraction,(PetscEnum*)&extraction,&flg)); |
1018 |
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)); |
1019 | |||
1020 |
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(); |
1021 | |||
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 (!nep->rg) PetscCall(NEPGetRG(nep,&nep->rg)); |
1023 |
4/6✓ Branch 0 taken 1 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 */ |
1024 |
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)); |
1025 |
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()"); |
1026 |
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])); |
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(PetscSubcommSetFromOptions(ctx->contour->subcomm)); |
1028 |
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); |
1029 | } | ||
1030 | |||
1031 | 187 | static PetscErrorCode NEPDestroy_CISS(NEP nep) | |
1032 | { | ||
1033 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
1034 | |||
1035 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
1036 |
4/6✓ Branch 0 taken 1 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)); |
1037 |
4/6✓ Branch 0 taken 1 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)); |
1038 |
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)); |
1039 |
4/6✓ Branch 0 taken 1 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)); |
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(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSGetSizes_C",NULL)); |
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(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetThreshold_C",NULL)); |
1042 |
4/6✓ Branch 0 taken 1 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)); |
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,"NEPCISSSetRefinement_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,"NEPCISSGetRefinement_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,"NEPCISSSetExtraction_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,"NEPCISSGetExtraction_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,"NEPCISSGetKSPs_C",NULL)); |
1048 |
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); |
1049 | } | ||
1050 | |||
1051 | 5 | static PetscErrorCode NEPView_CISS(NEP nep,PetscViewer viewer) | |
1052 | { | ||
1053 | 5 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
1054 | 5 | PetscBool isascii; | |
1055 | 5 | PetscViewer sviewer; | |
1056 | |||
1057 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
5 | PetscFunctionBegin; |
1058 |
4/6✓ Branch 0 taken 1 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)); |
1059 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
5 | if (isascii) { |
1060 |
4/6✓ Branch 0 taken 1 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)); |
1061 |
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")); |
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(PetscViewerASCIIPrintf(viewer," threshold { delta: %g, spurious threshold: %g }\n",(double)ctx->delta,(double)ctx->spurious_threshold)); |
1063 |
4/6✓ Branch 0 taken 1 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)); |
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," extraction: %s\n",NEPCISSExtractions[ctx->extraction])); |
1065 |
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)); |
1066 |
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()"); |
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(PetscViewerASCIIPushTab(viewer)); |
1068 |
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) { |
1069 | ✗ | PetscCall(PetscViewerGetSubViewer(viewer,ctx->contour->subcomm->child,&sviewer)); | |
1070 | ✗ | if (!ctx->contour->subcomm->color) PetscCall(KSPView(ctx->contour->ksp[0],sviewer)); | |
1071 | ✗ | PetscCall(PetscViewerFlush(sviewer)); | |
1072 | ✗ | PetscCall(PetscViewerRestoreSubViewer(viewer,ctx->contour->subcomm->child,&sviewer)); | |
1073 | /* extra call needed because of the two calls to PetscViewerASCIIPushSynchronized() in PetscViewerGetSubViewer() */ | ||
1074 | ✗ | PetscCall(PetscViewerASCIIPopSynchronized(viewer)); | |
1075 |
4/6✓ Branch 0 taken 1 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)); |
1076 |
4/6✓ Branch 0 taken 1 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)); |
1077 | } | ||
1078 |
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); |
1079 | } | ||
1080 | |||
1081 | 384 | static PetscErrorCode NEPSetDSType_CISS(NEP nep) | |
1082 | { | ||
1083 | 384 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
1084 | |||
1085 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
384 | PetscFunctionBegin; |
1086 |
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) { |
1087 |
4/6✓ Branch 0 taken 1 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; |
1088 |
4/6✓ Branch 0 taken 1 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; |
1089 |
4/6✓ Branch 0 taken 1 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; |
1090 | } | ||
1091 |
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); |
1092 | } | ||
1093 | |||
1094 | 187 | SLEPC_EXTERN PetscErrorCode NEPCreate_CISS(NEP nep) | |
1095 | { | ||
1096 | 187 | NEP_CISS *ctx = (NEP_CISS*)nep->data; | |
1097 | |||
1098 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
187 | PetscFunctionBegin; |
1099 |
4/6✓ Branch 0 taken 1 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)); |
1100 | 187 | nep->data = ctx; | |
1101 | /* set default values of parameters */ | ||
1102 | 187 | ctx->N = 32; | |
1103 | 187 | ctx->L = 16; | |
1104 | 187 | ctx->M = ctx->N/4; | |
1105 | 187 | ctx->delta = SLEPC_DEFAULT_TOL*1e-4; | |
1106 | 187 | ctx->L_max = 64; | |
1107 | 187 | ctx->spurious_threshold = PetscSqrtReal(SLEPC_DEFAULT_TOL); | |
1108 | 187 | ctx->isreal = PETSC_FALSE; | |
1109 | 187 | ctx->npart = 1; | |
1110 | |||
1111 | 187 | nep->useds = PETSC_TRUE; | |
1112 | |||
1113 | 187 | nep->ops->solve = NEPSolve_CISS; | |
1114 | 187 | nep->ops->setup = NEPSetUp_CISS; | |
1115 | 187 | nep->ops->setfromoptions = NEPSetFromOptions_CISS; | |
1116 | 187 | nep->ops->reset = NEPReset_CISS; | |
1117 | 187 | nep->ops->destroy = NEPDestroy_CISS; | |
1118 | 187 | nep->ops->view = NEPView_CISS; | |
1119 | 187 | nep->ops->setdstype = NEPSetDSType_CISS; | |
1120 | |||
1121 |
4/6✓ Branch 0 taken 1 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)); |
1122 |
4/6✓ Branch 0 taken 1 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)); |
1123 |
4/6✓ Branch 0 taken 1 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)); |
1124 |
4/6✓ Branch 0 taken 1 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)); |
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(PetscObjectComposeFunction((PetscObject)nep,"NEPCISSSetRefinement_C",NEPCISSSetRefinement_CISS)); |
1126 |
4/6✓ Branch 0 taken 1 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)); |
1127 |
4/6✓ Branch 0 taken 1 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)); |
1128 |
4/6✓ Branch 0 taken 1 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)); |
1129 |
4/6✓ Branch 0 taken 1 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)); |
1130 |
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); |
1131 | } | ||
1132 |