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 polynomial eigenvalue problems using contour | ||
27 | integral", Japan J. Indust. Appl. Math. 27:73-90, 2010. | ||
28 | */ | ||
29 | |||
30 | #include <slepc/private/pepimpl.h> /*I "slepcpep.h" I*/ | ||
31 | #include <slepc/private/slepccontour.h> | ||
32 | |||
33 | typedef struct { | ||
34 | /* parameters */ | ||
35 | PetscInt N; /* number of integration points (32) */ | ||
36 | PetscInt L; /* block size (16) */ | ||
37 | PetscInt M; /* moment degree (N/4 = 4) */ | ||
38 | PetscReal delta; /* threshold of singular value (1e-12) */ | ||
39 | PetscInt L_max; /* maximum number of columns of the source matrix V */ | ||
40 | PetscReal spurious_threshold; /* discard spurious eigenpairs */ | ||
41 | PetscBool isreal; /* T(z) is real for real z */ | ||
42 | PetscInt npart; /* number of partitions */ | ||
43 | PetscInt refine_inner; | ||
44 | PetscInt refine_blocksize; | ||
45 | PEPCISSExtraction extraction; | ||
46 | /* private data */ | ||
47 | SlepcContourData contour; | ||
48 | PetscReal *sigma; /* threshold for numerical rank */ | ||
49 | PetscScalar *weight; | ||
50 | PetscScalar *omega; | ||
51 | PetscScalar *pp; | ||
52 | BV V; | ||
53 | BV S; | ||
54 | BV Y; | ||
55 | PetscBool useconj; | ||
56 | Mat J,*Psplit; /* auxiliary matrices */ | ||
57 | BV pV; | ||
58 | PetscObjectId rgid; | ||
59 | PetscObjectState rgstate; | ||
60 | } PEP_CISS; | ||
61 | |||
62 | 4360 | static PetscErrorCode PEPComputeFunction(PEP pep,PetscScalar lambda,Mat T,Mat P,PetscBool deriv) | |
63 | { | ||
64 | 4360 | PetscInt i; | |
65 | 4360 | PetscScalar *coeff; | |
66 | 4360 | Mat *A,*K; | |
67 | 4360 | MatStructure str,strp; | |
68 | 4360 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
69 | 4360 | SlepcContourData contour = ctx->contour; | |
70 | |||
71 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
4360 | PetscFunctionBegin; |
72 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4360 | A = (contour->pA)?contour->pA:pep->A; |
73 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4360 | K = (contour->pP)?contour->pP:ctx->Psplit; |
74 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
4360 | PetscCall(PetscMalloc1(pep->nmat,&coeff)); |
75 |
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.
|
4360 | if (deriv) PetscCall(PEPEvaluateBasisDerivative(pep,lambda,0,coeff,NULL)); |
76 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | else PetscCall(PEPEvaluateBasis(pep,lambda,0,coeff,NULL)); |
77 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
4360 | PetscCall(STGetMatStructure(pep->st,&str)); |
78 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
4360 | PetscCall(MatZeroEntries(T)); |
79 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
4360 | if (!deriv && T != P) { |
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.
|
320 | PetscCall(STGetSplitPreconditionerInfo(pep->st,NULL,&strp)); |
81 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
320 | PetscCall(MatZeroEntries(P)); |
82 | } | ||
83 | 4360 | i = deriv?1:0; | |
84 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
21260 | for (;i<pep->nmat;i++) { |
85 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
16900 | PetscCall(MatAXPY(T,coeff[i],A[i],str)); |
86 |
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.
|
16900 | if (!deriv && T != P) PetscCall(MatAXPY(P,coeff[i],K[i],strp)); |
87 | } | ||
88 |
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.
|
4360 | PetscCall(PetscFree(coeff)); |
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.
|
872 | PetscFunctionReturn(PETSC_SUCCESS); |
90 | } | ||
91 | |||
92 | /* | ||
93 | Set up KSP solvers for every integration point | ||
94 | */ | ||
95 | 65 | static PetscErrorCode PEPCISSSetUp(PEP pep,Mat T,Mat P) | |
96 | { | ||
97 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
98 | 65 | SlepcContourData contour; | |
99 | 65 | PetscInt i,p_id; | |
100 | 65 | Mat Amat,Pmat; | |
101 | |||
102 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
103 |
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.
|
65 | if (!ctx->contour || !ctx->contour->ksp) PetscCall(PEPCISSGetKSPs(pep,NULL,NULL)); |
104 | 65 | contour = ctx->contour; | |
105 |
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.
|
65 | PetscAssert(ctx->contour && ctx->contour->ksp,PetscObjectComm((PetscObject)pep),PETSC_ERR_PLIB,"Something went wrong with PEPCISSGetKSPs()"); |
106 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1925 | for (i=0;i<contour->npoints;i++) { |
107 | 1860 | p_id = i*contour->subcomm->n + contour->subcomm->color; | |
108 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(MatDuplicate(T,MAT_DO_NOT_COPY_VALUES,&Amat)); |
109 |
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.
|
1860 | if (T != P) PetscCall(MatDuplicate(P,MAT_DO_NOT_COPY_VALUES,&Pmat)); else Pmat = Amat; |
110 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(PEPComputeFunction(pep,ctx->omega[p_id],Amat,Pmat,PETSC_FALSE)); |
111 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(PEP_KSPSetOperators(contour->ksp[i],Amat,Pmat)); |
112 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(MatDestroy(&Amat)); |
113 |
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.
|
1860 | if (T != P) PetscCall(MatDestroy(&Pmat)); |
114 | } | ||
115 |
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.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
116 | } | ||
117 | |||
118 | /* | ||
119 | Y_i = F(z_i)^{-1}Fp(z_i)V for every integration point, Y=[Y_i] is in the context | ||
120 | */ | ||
121 | 85 | static PetscErrorCode PEPCISSSolve(PEP pep,Mat dT,BV V,PetscInt L_start,PetscInt L_end) | |
122 | { | ||
123 | 85 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
124 | 85 | SlepcContourData contour; | |
125 | 85 | PetscInt i,p_id; | |
126 | 85 | Mat MV,BMV=NULL,MC; | |
127 | |||
128 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
85 | PetscFunctionBegin; |
129 | 85 | contour = ctx->contour; | |
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.
|
85 | PetscCall(BVSetActiveColumns(V,L_start,L_end)); |
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.
|
85 | PetscCall(BVGetMat(V,&MV)); |
132 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2585 | for (i=0;i<contour->npoints;i++) { |
133 | 2500 | p_id = i*contour->subcomm->n + contour->subcomm->color; | |
134 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2500 | PetscCall(PEPComputeFunction(pep,ctx->omega[p_id],dT,NULL,PETSC_TRUE)); |
135 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2500 | PetscCall(BVSetActiveColumns(ctx->Y,i*ctx->L+L_start,i*ctx->L+L_end)); |
136 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2500 | PetscCall(BVGetMat(ctx->Y,&MC)); |
137 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2500 | if (!i) { |
138 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
85 | PetscCall(MatProductCreate(dT,MV,NULL,&BMV)); |
139 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
85 | PetscCall(MatProductSetType(BMV,MATPRODUCT_AB)); |
140 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
85 | PetscCall(MatProductSetFromOptions(BMV)); |
141 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
85 | PetscCall(MatProductSymbolic(BMV)); |
142 | } | ||
143 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2500 | PetscCall(MatProductNumeric(BMV)); |
144 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2500 | PetscCall(KSPMatSolve(contour->ksp[i],BMV,MC)); |
145 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2500 | PetscCall(BVRestoreMat(ctx->Y,&MC)); |
146 | } | ||
147 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
85 | PetscCall(MatDestroy(&BMV)); |
148 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
85 | PetscCall(BVRestoreMat(V,&MV)); |
149 |
6/12✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
17 | PetscFunctionReturn(PETSC_SUCCESS); |
150 | } | ||
151 | |||
152 | 65 | static PetscErrorCode PEPSetUp_CISS(PEP pep) | |
153 | { | ||
154 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
155 | 65 | SlepcContourData contour; | |
156 | 65 | PetscInt i,nwork,nsplit; | |
157 | 65 | PetscBool istrivial,isellipse,flg; | |
158 | 65 | PetscObjectId id; | |
159 | 65 | PetscObjectState state; | |
160 | 65 | Vec v0; | |
161 | |||
162 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
163 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (pep->ncv==PETSC_DETERMINE) pep->ncv = ctx->L_max*ctx->M; |
164 | else { | ||
165 | ✗ | ctx->L_max = pep->ncv/ctx->M; | |
166 | ✗ | if (!ctx->L_max) { | |
167 | ✗ | ctx->L_max = 1; | |
168 | ✗ | pep->ncv = ctx->L_max*ctx->M; | |
169 | } | ||
170 | } | ||
171 | 65 | ctx->L = PetscMin(ctx->L,ctx->L_max); | |
172 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (pep->max_it==PETSC_DETERMINE) pep->max_it = 5; |
173 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (pep->mpd==PETSC_DETERMINE) pep->mpd = pep->ncv; |
174 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (!pep->which) pep->which = PEP_ALL; |
175 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
65 | PetscCheck(pep->which==PEP_ALL,PetscObjectComm((PetscObject)pep),PETSC_ERR_SUP,"This solver supports only computing all eigenvalues"); |
176 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
65 | PEPCheckUnsupported(pep,PEP_FEATURE_STOPPING); |
177 |
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.
|
65 | PEPCheckIgnored(pep,PEP_FEATURE_SCALE); |
178 | |||
179 | /* check region */ | ||
180 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(RGIsTrivial(pep->rg,&istrivial)); |
181 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
65 | PetscCheck(!istrivial,PetscObjectComm((PetscObject)pep),PETSC_ERR_SUP,"CISS requires a nontrivial region, e.g. -rg_type ellipse ..."); |
182 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(RGGetComplement(pep->rg,&flg)); |
183 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
65 | PetscCheck(!flg,PetscObjectComm((PetscObject)pep),PETSC_ERR_SUP,"A region with complement flag set is not allowed"); |
184 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectTypeCompare((PetscObject)pep->rg,RGELLIPSE,&isellipse)); |
185 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
65 | PetscCheck(isellipse,PetscObjectComm((PetscObject)pep),PETSC_ERR_SUP,"Currently only implemented for elliptic regions"); |
186 | |||
187 | /* if the region has changed, then reset contour data */ | ||
188 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectGetId((PetscObject)pep->rg,&id)); |
189 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectStateGet((PetscObject)pep->rg,&state)); |
190 |
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.
|
65 | if (ctx->rgid && (id != ctx->rgid || state != ctx->rgstate)) { |
191 | ✗ | PetscCall(SlepcContourDataDestroy(&ctx->contour)); | |
192 | ✗ | PetscCall(PetscInfo(pep,"Resetting the contour data structure due to a change of region\n")); | |
193 | ✗ | ctx->rgid = id; ctx->rgstate = state; | |
194 | } | ||
195 | |||
196 | /* create contour data structure */ | ||
197 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
65 | if (!ctx->contour) { |
198 | ✗ | PetscCall(RGCanUseConjugates(pep->rg,ctx->isreal,&ctx->useconj)); | |
199 | ✗ | PetscCall(SlepcContourDataCreate(ctx->useconj?ctx->N/2:ctx->N,ctx->npart,(PetscObject)pep,&ctx->contour)); | |
200 | } | ||
201 | |||
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.
|
65 | PetscCall(PEPAllocateSolution(pep,0)); |
203 |
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.
|
65 | if (ctx->weight) PetscCall(PetscFree4(ctx->weight,ctx->omega,ctx->pp,ctx->sigma)); |
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.
|
65 | PetscCall(PetscMalloc4(ctx->N,&ctx->weight,ctx->N,&ctx->omega,ctx->N,&ctx->pp,ctx->L_max*ctx->M,&ctx->sigma)); |
205 | |||
206 | /* allocate basis vectors */ | ||
207 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVDestroy(&ctx->S)); |
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.
|
65 | PetscCall(BVDuplicateResize(pep->V,ctx->L*ctx->M,&ctx->S)); |
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.
|
65 | PetscCall(BVDestroy(&ctx->V)); |
210 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVDuplicateResize(pep->V,ctx->L,&ctx->V)); |
211 | |||
212 | /* check if a user-defined split preconditioner has been set */ | ||
213 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(STGetSplitPreconditionerInfo(pep->st,&nsplit,NULL)); |
214 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (nsplit) { |
215 |
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.
|
15 | PetscCall(PetscFree(ctx->Psplit)); |
216 |
4/6✓ Branch 0 taken 1 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(PetscMalloc1(nsplit,&ctx->Psplit)); |
217 |
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.
|
60 | for (i=0;i<nsplit;i++) PetscCall(STGetSplitPreconditionerTerm(pep->st,i,&ctx->Psplit[i])); |
218 | } | ||
219 | |||
220 | 65 | contour = ctx->contour; | |
221 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(SlepcContourRedundantMat(contour,pep->nmat,pep->A,ctx->Psplit)); |
222 |
8/10✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 4 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
65 | if (!ctx->J) PetscCall(MatDuplicate(contour->pA?contour->pA[0]:pep->A[0],MAT_DO_NOT_COPY_VALUES,&ctx->J)); |
223 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (contour->pA) { |
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.
|
20 | PetscCall(BVGetColumn(ctx->V,0,&v0)); |
225 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
20 | PetscCall(SlepcContourScatterCreate(contour,v0)); |
226 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
20 | PetscCall(BVRestoreColumn(ctx->V,0,&v0)); |
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.
|
20 | PetscCall(BVDestroy(&ctx->pV)); |
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.
|
20 | PetscCall(BVCreate(PetscObjectComm((PetscObject)contour->xsub),&ctx->pV)); |
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.
|
20 | PetscCall(BVSetSizesFromVec(ctx->pV,contour->xsub,pep->n)); |
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.
|
20 | PetscCall(BVSetFromOptions(ctx->pV)); |
231 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
20 | PetscCall(BVResize(ctx->pV,ctx->L,PETSC_FALSE)); |
232 | } | ||
233 | |||
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.
|
65 | PetscCall(BVDestroy(&ctx->Y)); |
235 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (contour->pA) { |
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.
|
20 | PetscCall(BVCreate(PetscObjectComm((PetscObject)contour->xsub),&ctx->Y)); |
237 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
20 | PetscCall(BVSetSizesFromVec(ctx->Y,contour->xsub,pep->n)); |
238 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
20 | PetscCall(BVSetFromOptions(ctx->Y)); |
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.
|
20 | PetscCall(BVResize(ctx->Y,contour->npoints*ctx->L,PETSC_FALSE)); |
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.
|
45 | } else PetscCall(BVDuplicateResize(pep->V,contour->npoints*ctx->L,&ctx->Y)); |
241 | |||
242 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (ctx->extraction == PEP_CISS_EXTRACTION_RITZ) { |
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.
|
50 | PetscCall(DSPEPSetDegree(pep->ds,pep->nmat-1)); |
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.
|
50 | PetscCall(DSPEPSetCoefficients(pep->ds,pep->pbc)); |
245 | } | ||
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.
|
65 | PetscCall(DSAllocate(pep->ds,pep->ncv)); |
247 | 65 | nwork = 2; | |
248 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PEPSetWorkVecs(pep,nwork)); |
249 |
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.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
250 | } | ||
251 | |||
252 | 65 | static PetscErrorCode PEPSolve_CISS(PEP pep) | |
253 | { | ||
254 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
255 | 65 | SlepcContourData contour = ctx->contour; | |
256 | 65 | Mat X,M,E,T,P; | |
257 | 65 | PetscInt i,j,ld,L_add=0,nv=0,L_base=ctx->L,inner,*inside,nsplit; | |
258 | 65 | PetscScalar *Mu,*H0,*H1,*rr,*temp,center; | |
259 | 65 | PetscReal error,max_error,radius,rgscale,est_eig,eta; | |
260 | 65 | PetscBool isellipse,*fl1; | |
261 | 65 | Vec si; | |
262 | 65 | SlepcSC sc; | |
263 | 65 | PetscRandom rand; | |
264 | |||
265 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
266 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(DSGetSlepcSC(pep->ds,&sc)); |
267 | 65 | sc->comparison = SlepcCompareLargestMagnitude; | |
268 | 65 | sc->comparisonctx = NULL; | |
269 | 65 | sc->map = NULL; | |
270 | 65 | sc->mapobj = NULL; | |
271 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(DSGetLeadingDimension(pep->ds,&ld)); |
272 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(RGComputeQuadrature(pep->rg,RG_QUADRULE_TRAPEZOIDAL,ctx->N,ctx->omega,ctx->pp,ctx->weight)); |
273 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(STGetSplitPreconditionerInfo(pep->st,&nsplit,NULL)); |
274 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (contour->pA) { |
275 | 20 | T = contour->pA[0]; | |
276 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
20 | P = nsplit? contour->pP[0]: T; |
277 | } else { | ||
278 | 45 | T = pep->A[0]; | |
279 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
45 | P = nsplit? ctx->Psplit[0]: T; |
280 | } | ||
281 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PEPCISSSetUp(pep,T,P)); |
282 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVSetActiveColumns(ctx->V,0,ctx->L)); |
283 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVSetRandomSign(ctx->V)); |
284 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVGetRandomContext(ctx->V,&rand)); |
285 |
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.
|
65 | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); |
286 |
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.
|
65 | PetscCall(PEPCISSSolve(pep,ctx->J,(contour->pA)?ctx->pV:ctx->V,0,ctx->L)); |
287 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectTypeCompare((PetscObject)pep->rg,RGELLIPSE,&isellipse)); |
288 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (isellipse) { |
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.
|
65 | PetscCall(BVTraceQuadrature(ctx->Y,ctx->V,ctx->L,ctx->L,ctx->weight,contour->scatterin,contour->subcomm,contour->npoints,ctx->useconj,&est_eig)); |
290 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscInfo(pep,"Estimated eigenvalue count: %f\n",(double)est_eig)); |
291 | 65 | eta = PetscPowReal(10.0,-PetscLog10Real(pep->tol)/ctx->N); | |
292 | 65 | L_add = PetscMax(0,(PetscInt)PetscCeilReal((est_eig*eta)/ctx->M)-ctx->L); | |
293 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
65 | if (L_add>ctx->L_max-ctx->L) { |
294 | ✗ | PetscCall(PetscInfo(pep,"Number of eigenvalues inside the contour path may be too large\n")); | |
295 | ✗ | L_add = ctx->L_max-ctx->L; | |
296 | } | ||
297 | } | ||
298 | /* Updates L after estimate the number of eigenvalue */ | ||
299 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (L_add>0) { |
300 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(PetscInfo(pep,"Changing L %" PetscInt_FMT " -> %" PetscInt_FMT " by Estimate #Eig\n",ctx->L,ctx->L+L_add)); |
301 |
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.
|
10 | PetscCall(BVCISSResizeBases(ctx->S,contour->pA?ctx->pV:ctx->V,ctx->Y,ctx->L,ctx->L+L_add,ctx->M,contour->npoints)); |
302 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(BVSetActiveColumns(ctx->V,ctx->L,ctx->L+L_add)); |
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.
|
10 | PetscCall(BVSetRandomSign(ctx->V)); |
304 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10 | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); |
305 | 10 | ctx->L += L_add; | |
306 |
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.
|
10 | PetscCall(PEPCISSSolve(pep,ctx->J,(contour->pA)?ctx->pV:ctx->V,ctx->L-L_add,ctx->L)); |
307 | } | ||
308 | |||
309 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscMalloc2(ctx->L*ctx->L*ctx->M*2,&Mu,ctx->L*ctx->M*ctx->L*ctx->M,&H0)); |
310 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
75 | for (i=0;i<ctx->refine_blocksize;i++) { |
311 |
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.
|
25 | PetscCall(BVDotQuadrature(ctx->Y,(contour->pA)?ctx->pV:ctx->V,Mu,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->subcomm,contour->npoints,ctx->useconj)); |
312 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
25 | PetscCall(CISS_BlockHankel(Mu,0,ctx->L,ctx->M,H0)); |
313 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
25 | PetscCall(PetscLogEventBegin(PEP_CISS_SVD,pep,0,0,0)); |
314 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
25 | PetscCall(SlepcCISS_BH_SVD(H0,ctx->L*ctx->M,ctx->delta,ctx->sigma,&nv)); |
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.
|
25 | PetscCall(PetscLogEventEnd(PEP_CISS_SVD,pep,0,0,0)); |
316 |
4/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 not taken.
|
25 | if (ctx->sigma[0]<=ctx->delta || nv < ctx->L*ctx->M || ctx->L == ctx->L_max) break; |
317 | 10 | L_add = L_base; | |
318 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
10 | if (ctx->L+L_add>ctx->L_max) L_add = ctx->L_max-ctx->L; |
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.
|
10 | PetscCall(PetscInfo(pep,"Changing L %" PetscInt_FMT " -> %" PetscInt_FMT " by SVD(H0)\n",ctx->L,ctx->L+L_add)); |
320 |
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.
|
10 | PetscCall(BVCISSResizeBases(ctx->S,contour->pA?ctx->pV:ctx->V,ctx->Y,ctx->L,ctx->L+L_add,ctx->M,contour->npoints)); |
321 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(BVSetActiveColumns(ctx->V,ctx->L,ctx->L+L_add)); |
322 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(BVSetRandomSign(ctx->V)); |
323 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10 | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); |
324 | 10 | ctx->L += L_add; | |
325 |
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.
|
10 | PetscCall(PEPCISSSolve(pep,ctx->J,(contour->pA)?ctx->pV:ctx->V,ctx->L-L_add,ctx->L)); |
326 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
10 | if (L_add) { |
327 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(PetscFree2(Mu,H0)); |
328 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(PetscMalloc2(ctx->L*ctx->L*ctx->M*2,&Mu,ctx->L*ctx->M*ctx->L*ctx->M,&H0)); |
329 | } | ||
330 | } | ||
331 | |||
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.
|
65 | PetscCall(RGGetScale(pep->rg,&rgscale)); |
333 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(RGEllipseGetParameters(pep->rg,¢er,&radius,NULL)); |
334 | |||
335 |
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.
|
65 | if (ctx->extraction == PEP_CISS_EXTRACTION_HANKEL) PetscCall(PetscMalloc1(ctx->L*ctx->M*ctx->L*ctx->M,&H1)); |
336 | |||
337 | 130 | while (pep->reason == PEP_CONVERGED_ITERATING) { | |
338 | 65 | pep->its++; | |
339 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | for (inner=0;inner<=ctx->refine_inner;inner++) { |
340 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (ctx->extraction == PEP_CISS_EXTRACTION_HANKEL) { |
341 |
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.
|
10 | PetscCall(BVDotQuadrature(ctx->Y,(contour->pA)?ctx->pV:ctx->V,Mu,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->subcomm,contour->npoints,ctx->useconj)); |
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.
|
10 | PetscCall(CISS_BlockHankel(Mu,0,ctx->L,ctx->M,H0)); |
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.
|
10 | PetscCall(PetscLogEventBegin(PEP_CISS_SVD,pep,0,0,0)); |
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.
|
10 | PetscCall(SlepcCISS_BH_SVD(H0,ctx->L*ctx->M,ctx->delta,ctx->sigma,&nv)); |
345 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(PetscLogEventEnd(PEP_CISS_SVD,pep,0,0,0)); |
346 | } else { | ||
347 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
55 | PetscCall(BVSumQuadrature(ctx->S,ctx->Y,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->scatterin,contour->subcomm,contour->npoints,ctx->useconj)); |
348 | /* compute SVD of S */ | ||
349 |
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.
|
105 | PetscCall(BVSVDAndRank(ctx->S,ctx->M,ctx->L,ctx->delta,(ctx->extraction==PEP_CISS_EXTRACTION_CAA)?BV_SVD_METHOD_QR_CAA:BV_SVD_METHOD_QR,H0,ctx->sigma,&nv)); |
350 | } | ||
351 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscInfo(pep,"Estimated rank: nv = %" PetscInt_FMT "\n",nv)); |
352 |
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.
|
65 | if (ctx->sigma[0]>ctx->delta && nv==ctx->L*ctx->M && inner!=ctx->refine_inner) { |
353 | ✗ | PetscCall(BVSumQuadrature(ctx->S,ctx->Y,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->scatterin,contour->subcomm,contour->npoints,ctx->useconj)); | |
354 | ✗ | PetscCall(BVSetActiveColumns(ctx->S,0,ctx->L)); | |
355 | ✗ | PetscCall(BVSetActiveColumns(ctx->V,0,ctx->L)); | |
356 | ✗ | PetscCall(BVCopy(ctx->S,ctx->V)); | |
357 | ✗ | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); | |
358 | ✗ | PetscCall(PEPCISSSolve(pep,ctx->J,(contour->pA)?ctx->pV:ctx->V,0,ctx->L)); | |
359 | } else break; | ||
360 | } | ||
361 | 65 | pep->nconv = 0; | |
362 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
65 | if (nv == 0) { pep->reason = PEP_CONVERGED_TOL; break; } |
363 | else { | ||
364 | /* Extracting eigenpairs */ | ||
365 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(DSSetDimensions(pep->ds,nv,0,0)); |
366 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(DSSetState(pep->ds,DS_STATE_RAW)); |
367 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (ctx->extraction == PEP_CISS_EXTRACTION_HANKEL) { |
368 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(CISS_BlockHankel(Mu,0,ctx->L,ctx->M,H0)); |
369 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(CISS_BlockHankel(Mu,1,ctx->L,ctx->M,H1)); |
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.
|
10 | PetscCall(DSGetArray(pep->ds,DS_MAT_A,&temp)); |
371 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
375 | for (j=0;j<nv;j++) |
372 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
18750 | for (i=0;i<nv;i++) |
373 | 18385 | temp[i+j*ld] = H1[i+j*ctx->L*ctx->M]; | |
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.
|
10 | PetscCall(DSRestoreArray(pep->ds,DS_MAT_A,&temp)); |
375 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(DSGetArray(pep->ds,DS_MAT_B,&temp)); |
376 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
375 | for (j=0;j<nv;j++) |
377 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
18750 | for (i=0;i<nv;i++) |
378 | 18385 | temp[i+j*ld] = H0[i+j*ctx->L*ctx->M]; | |
379 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(DSRestoreArray(pep->ds,DS_MAT_B,&temp)); |
380 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
55 | } else if (ctx->extraction == PEP_CISS_EXTRACTION_CAA) { |
381 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5 | PetscCall(BVSetActiveColumns(ctx->S,0,nv)); |
382 |
4/6✓ Branch 0 taken 1 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(DSGetArray(pep->ds,DS_MAT_A,&temp)); |
383 |
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.
|
115 | for (i=0;i<nv;i++) PetscCall(PetscArraycpy(temp+i*ld,H0+i*nv,nv)); |
384 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5 | PetscCall(DSRestoreArray(pep->ds,DS_MAT_A,&temp)); |
385 | } else { | ||
386 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
50 | PetscCall(BVSetActiveColumns(ctx->S,0,nv)); |
387 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
250 | for (i=0;i<pep->nmat;i++) { |
388 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
200 | PetscCall(DSGetMat(pep->ds,DSMatExtra[i],&E)); |
389 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
200 | PetscCall(BVMatProject(ctx->S,pep->A[i],ctx->S,E)); |
390 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
200 | PetscCall(DSRestoreMat(pep->ds,DSMatExtra[i],&E)); |
391 | } | ||
392 | 50 | nv = (pep->nmat-1)*nv; | |
393 | } | ||
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.
|
65 | PetscCall(DSSolve(pep->ds,pep->eigr,pep->eigi)); |
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.
|
65 | PetscCall(DSSynchronize(pep->ds,pep->eigr,pep->eigi)); |
396 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (ctx->extraction == PEP_CISS_EXTRACTION_CAA || ctx->extraction == PEP_CISS_EXTRACTION_HANKEL) { |
397 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
490 | for (i=0;i<nv;i++) { |
398 | 475 | pep->eigr[i] = (pep->eigr[i]*radius+center)*rgscale; | |
399 | } | ||
400 | } | ||
401 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscMalloc3(nv,&fl1,nv,&inside,nv,&rr)); |
402 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(DSVectors(pep->ds,DS_MAT_X,NULL,NULL)); |
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.
|
65 | PetscCall(DSGetMat(pep->ds,DS_MAT_X,&X)); |
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.
|
65 | PetscCall(SlepcCISS_isGhost(X,nv,ctx->sigma,ctx->spurious_threshold,fl1)); |
405 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(DSRestoreMat(pep->ds,DS_MAT_X,&X)); |
406 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(RGCheckInside(pep->rg,nv,pep->eigr,pep->eigi,inside)); |
407 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
7030 | for (i=0;i<nv;i++) { |
408 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
6965 | if (fl1[i] && inside[i]>=0) { |
409 | 505 | rr[i] = 1.0; | |
410 | 505 | pep->nconv++; | |
411 | 6460 | } else rr[i] = 0.0; | |
412 | } | ||
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.
|
65 | PetscCall(DSSort(pep->ds,pep->eigr,pep->eigi,rr,NULL,&pep->nconv)); |
414 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(DSSynchronize(pep->ds,pep->eigr,pep->eigi)); |
415 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (ctx->extraction == PEP_CISS_EXTRACTION_CAA || ctx->extraction == PEP_CISS_EXTRACTION_HANKEL) { |
416 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
490 | for (i=0;i<nv;i++) pep->eigr[i] = (pep->eigr[i]*radius+center)*rgscale; |
417 | } | ||
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.
|
65 | PetscCall(PetscFree3(fl1,inside,rr)); |
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.
|
65 | PetscCall(BVSetActiveColumns(pep->V,0,nv)); |
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.
|
65 | PetscCall(DSVectors(pep->ds,DS_MAT_X,NULL,NULL)); |
421 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (ctx->extraction == PEP_CISS_EXTRACTION_HANKEL) { |
422 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(BVSumQuadrature(ctx->S,ctx->Y,ctx->M,ctx->L,ctx->L,ctx->weight,ctx->pp,contour->scatterin,contour->subcomm,contour->npoints,ctx->useconj)); |
423 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(BVSetActiveColumns(ctx->S,0,nv)); |
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.
|
10 | PetscCall(BVCopy(ctx->S,pep->V)); |
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.
|
10 | PetscCall(DSGetMat(pep->ds,DS_MAT_X,&X)); |
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.
|
10 | PetscCall(BVMultInPlace(ctx->S,X,0,pep->nconv)); |
427 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(BVMultInPlace(pep->V,X,0,pep->nconv)); |
428 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | PetscCall(DSRestoreMat(pep->ds,DS_MAT_X,&X)); |
429 | } else { | ||
430 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
55 | PetscCall(DSGetMat(pep->ds,DS_MAT_X,&X)); |
431 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
55 | PetscCall(BVMultInPlace(ctx->S,X,0,pep->nconv)); |
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.
|
55 | PetscCall(DSRestoreMat(pep->ds,DS_MAT_X,&X)); |
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.
|
55 | PetscCall(BVSetActiveColumns(ctx->S,0,pep->nconv)); |
434 |
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.
|
55 | PetscCall(BVCopy(ctx->S,pep->V)); |
435 | } | ||
436 | max_error = 0.0; | ||
437 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
570 | for (i=0;i<pep->nconv;i++) { |
438 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
505 | PetscCall(BVGetColumn(pep->V,i,&si)); |
439 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
505 | PetscCall(VecNormalize(si,NULL)); |
440 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
505 | PetscCall(PEPComputeResidualNorm_Private(pep,pep->eigr[i],0,si,NULL,pep->work,&error)); |
441 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
505 | PetscCall((*pep->converged)(pep,pep->eigr[i],0,error,&error,pep->convergedctx)); |
442 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
505 | PetscCall(BVRestoreColumn(pep->V,i,&si)); |
443 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
660 | max_error = PetscMax(max_error,error); |
444 | } | ||
445 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (max_error <= pep->tol) pep->reason = PEP_CONVERGED_TOL; |
446 | ✗ | else if (pep->its > pep->max_it) pep->reason = PEP_DIVERGED_ITS; | |
447 | else { | ||
448 | ✗ | if (pep->nconv > ctx->L) nv = pep->nconv; | |
449 | ✗ | else if (ctx->L > nv) nv = ctx->L; | |
450 | ✗ | nv = PetscMin(nv,ctx->L*ctx->M); | |
451 | ✗ | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,nv,ctx->L,NULL,&M)); | |
452 | ✗ | PetscCall(MatSetRandom(M,rand)); | |
453 | ✗ | PetscCall(BVSetActiveColumns(ctx->S,0,nv)); | |
454 | ✗ | PetscCall(BVMultInPlace(ctx->S,M,0,ctx->L)); | |
455 | ✗ | PetscCall(MatDestroy(&M)); | |
456 | ✗ | PetscCall(BVSetActiveColumns(ctx->S,0,ctx->L)); | |
457 | ✗ | PetscCall(BVSetActiveColumns(ctx->V,0,ctx->L)); | |
458 | ✗ | PetscCall(BVCopy(ctx->S,ctx->V)); | |
459 | ✗ | if (contour->pA) PetscCall(BVScatter(ctx->V,ctx->pV,contour->scatterin,contour->xdup)); | |
460 |
4/10✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 1 times.
|
130 | PetscCall(PEPCISSSolve(pep,ctx->J,(contour->pA)?ctx->pV:ctx->V,0,ctx->L)); |
461 | } | ||
462 | } | ||
463 | } | ||
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.
|
65 | PetscCall(PetscFree2(Mu,H0)); |
465 |
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.
|
65 | if (ctx->extraction == PEP_CISS_EXTRACTION_HANKEL) PetscCall(PetscFree(H1)); |
466 |
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.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
467 | } | ||
468 | |||
469 | 45 | static PetscErrorCode PEPCISSSetSizes_CISS(PEP pep,PetscInt ip,PetscInt bs,PetscInt ms,PetscInt npart,PetscInt bsmax,PetscBool realmats) | |
470 | { | ||
471 | 45 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
472 | 45 | PetscInt oN,oL,oM,oLmax,onpart; | |
473 | 45 | PetscMPIInt size; | |
474 | |||
475 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
45 | PetscFunctionBegin; |
476 | 45 | oN = ctx->N; | |
477 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
45 | if (ip == PETSC_DETERMINE) { |
478 | ✗ | if (ctx->N!=32) { ctx->N =32; ctx->M = ctx->N/4; } | |
479 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
45 | } else if (ip != PETSC_CURRENT) { |
480 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45 | PetscCheck(ip>0,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"The ip argument must be > 0"); |
481 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45 | PetscCheck(ip%2==0,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"The ip argument must be an even number"); |
482 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
45 | if (ctx->N!=ip) { ctx->N = ip; ctx->M = ctx->N/4; } |
483 | } | ||
484 | 45 | oL = ctx->L; | |
485 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
45 | if (bs == PETSC_DETERMINE) { |
486 | 5 | ctx->L = 16; | |
487 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
40 | } else if (bs != PETSC_CURRENT) { |
488 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
40 | PetscCheck(bs>0,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"The bs argument must be > 0"); |
489 | 40 | ctx->L = bs; | |
490 | } | ||
491 | 45 | oM = ctx->M; | |
492 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
45 | if (ms == PETSC_DETERMINE) { |
493 | 5 | ctx->M = ctx->N/4; | |
494 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
40 | } else if (ms != PETSC_CURRENT) { |
495 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
40 | PetscCheck(ms>0,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"The ms argument must be > 0"); |
496 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
40 | PetscCheck(ms<=ctx->N,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"The ms argument must be less than or equal to the number of integration points"); |
497 | 40 | ctx->M = ms; | |
498 | } | ||
499 | 45 | onpart = ctx->npart; | |
500 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
45 | if (npart == PETSC_DETERMINE) { |
501 | ✗ | ctx->npart = 1; | |
502 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
45 | } else if (npart != PETSC_CURRENT) { |
503 |
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.
|
45 | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)pep),&size)); |
504 |
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.
|
45 | PetscCheck(npart>0 && npart<=size,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of npart"); |
505 | 45 | ctx->npart = npart; | |
506 | } | ||
507 | 45 | oLmax = ctx->L_max; | |
508 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
45 | if (bsmax == PETSC_DETERMINE) { |
509 | 5 | ctx->L_max = 64; | |
510 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
40 | } else if (bsmax != PETSC_CURRENT) { |
511 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
40 | PetscCheck(bsmax>0,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"The bsmax argument must be > 0"); |
512 | 40 | ctx->L_max = PetscMax(bsmax,ctx->L); | |
513 | } | ||
514 |
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.
|
45 | if (onpart != ctx->npart || oN != ctx->N || realmats != ctx->isreal) { |
515 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
30 | PetscCall(SlepcContourDataDestroy(&ctx->contour)); |
516 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
30 | PetscCall(PetscInfo(pep,"Resetting the contour data structure due to a change of parameters\n")); |
517 | 30 | pep->state = PEP_STATE_INITIAL; | |
518 | } | ||
519 | 45 | ctx->isreal = realmats; | |
520 |
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.
|
45 | if (oL != ctx->L || oM != ctx->M || oLmax != ctx->L_max) pep->state = PEP_STATE_INITIAL; |
521 |
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.
|
9 | PetscFunctionReturn(PETSC_SUCCESS); |
522 | } | ||
523 | |||
524 | /*@ | ||
525 | PEPCISSSetSizes - Sets the values of various size parameters in the CISS solver. | ||
526 | |||
527 | Logically Collective | ||
528 | |||
529 | Input Parameters: | ||
530 | + pep - the polynomial eigensolver context | ||
531 | . ip - number of integration points | ||
532 | . bs - block size | ||
533 | . ms - moment size | ||
534 | . npart - number of partitions when splitting the communicator | ||
535 | . bsmax - max block size | ||
536 | - realmats - all coefficient matrices of P(.) are real | ||
537 | |||
538 | Options Database Keys: | ||
539 | + -pep_ciss_integration_points - Sets the number of integration points | ||
540 | . -pep_ciss_blocksize - Sets the block size | ||
541 | . -pep_ciss_moments - Sets the moment size | ||
542 | . -pep_ciss_partitions - Sets the number of partitions | ||
543 | . -pep_ciss_maxblocksize - Sets the maximum block size | ||
544 | - -pep_ciss_realmats - all coefficient matrices of P(.) are real | ||
545 | |||
546 | Notes: | ||
547 | For all integer arguments, you can use PETSC_CURRENT to keep the current value, and | ||
548 | PETSC_DETERMINE to set them to a default value. | ||
549 | |||
550 | The default number of partitions is 1. This means the internal KSP object is shared | ||
551 | among all processes of the PEP communicator. Otherwise, the communicator is split | ||
552 | into npart communicators, so that npart KSP solves proceed simultaneously. | ||
553 | |||
554 | Level: advanced | ||
555 | |||
556 | .seealso: PEPCISSGetSizes() | ||
557 | @*/ | ||
558 | 45 | PetscErrorCode PEPCISSSetSizes(PEP pep,PetscInt ip,PetscInt bs,PetscInt ms,PetscInt npart,PetscInt bsmax,PetscBool realmats) | |
559 | { | ||
560 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
45 | PetscFunctionBegin; |
561 |
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.
|
45 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
562 |
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.
|
45 | PetscValidLogicalCollectiveInt(pep,ip,2); |
563 |
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.
|
45 | PetscValidLogicalCollectiveInt(pep,bs,3); |
564 |
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.
|
45 | PetscValidLogicalCollectiveInt(pep,ms,4); |
565 |
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.
|
45 | PetscValidLogicalCollectiveInt(pep,npart,5); |
566 |
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.
|
45 | PetscValidLogicalCollectiveInt(pep,bsmax,6); |
567 |
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.
|
45 | PetscValidLogicalCollectiveBool(pep,realmats,7); |
568 |
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.
|
45 | PetscTryMethod(pep,"PEPCISSSetSizes_C",(PEP,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscBool),(pep,ip,bs,ms,npart,bsmax,realmats)); |
569 |
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.
|
45 | PetscFunctionReturn(PETSC_SUCCESS); |
570 | } | ||
571 | |||
572 | 65 | static PetscErrorCode PEPCISSGetSizes_CISS(PEP pep,PetscInt *ip,PetscInt *bs,PetscInt *ms,PetscInt *npart,PetscInt *bsmax,PetscBool *realmats) | |
573 | { | ||
574 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
575 | |||
576 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
577 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (ip) *ip = ctx->N; |
578 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (bs) *bs = ctx->L; |
579 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (ms) *ms = ctx->M; |
580 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (npart) *npart = ctx->npart; |
581 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (bsmax) *bsmax = ctx->L_max; |
582 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (realmats) *realmats = ctx->isreal; |
583 |
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); |
584 | } | ||
585 | |||
586 | /*@ | ||
587 | PEPCISSGetSizes - Gets the values of various size parameters in the CISS solver. | ||
588 | |||
589 | Not Collective | ||
590 | |||
591 | Input Parameter: | ||
592 | . pep - the polynomial eigensolver context | ||
593 | |||
594 | Output Parameters: | ||
595 | + ip - number of integration points | ||
596 | . bs - block size | ||
597 | . ms - moment size | ||
598 | . npart - number of partitions when splitting the communicator | ||
599 | . bsmax - max block size | ||
600 | - realmats - all coefficient matrices of P(.) are real | ||
601 | |||
602 | Level: advanced | ||
603 | |||
604 | .seealso: PEPCISSSetSizes() | ||
605 | @*/ | ||
606 | 65 | PetscErrorCode PEPCISSGetSizes(PEP pep,PetscInt *ip,PetscInt *bs,PetscInt *ms,PetscInt *npart,PetscInt *bsmax,PetscBool *realmats) | |
607 | { | ||
608 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
609 |
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(pep,PEP_CLASSID,1); |
610 |
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(pep,"PEPCISSGetSizes_C",(PEP,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscBool*),(pep,ip,bs,ms,npart,bsmax,realmats)); |
611 |
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); |
612 | } | ||
613 | |||
614 | 5 | static PetscErrorCode PEPCISSSetThreshold_CISS(PEP pep,PetscReal delta,PetscReal spur) | |
615 | { | ||
616 | 5 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
617 | |||
618 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
5 | PetscFunctionBegin; |
619 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
5 | if (delta == (PetscReal)PETSC_DETERMINE) { |
620 | ✗ | ctx->delta = SLEPC_DEFAULT_TOL*1e-4; | |
621 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
5 | } else if (delta != (PetscReal)PETSC_CURRENT) { |
622 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
5 | PetscCheck(delta>0.0,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"The delta argument must be > 0.0"); |
623 | 5 | ctx->delta = delta; | |
624 | } | ||
625 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
5 | if (spur == (PetscReal)PETSC_DETERMINE) { |
626 | ✗ | ctx->spurious_threshold = PetscSqrtReal(SLEPC_DEFAULT_TOL); | |
627 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
5 | } else if (spur != (PetscReal)PETSC_CURRENT) { |
628 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
5 | PetscCheck(spur>0.0,PetscObjectComm((PetscObject)pep),PETSC_ERR_ARG_OUTOFRANGE,"The spurious threshold argument must be > 0.0"); |
629 | 5 | ctx->spurious_threshold = spur; | |
630 | } | ||
631 |
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); |
632 | } | ||
633 | |||
634 | /*@ | ||
635 | PEPCISSSetThreshold - Sets the values of various threshold parameters in | ||
636 | the CISS solver. | ||
637 | |||
638 | Logically Collective | ||
639 | |||
640 | Input Parameters: | ||
641 | + pep - the polynomial eigensolver context | ||
642 | . delta - threshold for numerical rank | ||
643 | - spur - spurious threshold (to discard spurious eigenpairs) | ||
644 | |||
645 | Options Database Keys: | ||
646 | + -pep_ciss_delta - Sets the delta | ||
647 | - -pep_ciss_spurious_threshold - Sets the spurious threshold | ||
648 | |||
649 | Note: | ||
650 | PETSC_CURRENT can be used to preserve the current value of any of the | ||
651 | arguments, and PETSC_DETERMINE to set them to a default value. | ||
652 | |||
653 | Level: advanced | ||
654 | |||
655 | .seealso: PEPCISSGetThreshold() | ||
656 | @*/ | ||
657 | 5 | PetscErrorCode PEPCISSSetThreshold(PEP pep,PetscReal delta,PetscReal spur) | |
658 | { | ||
659 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
5 | PetscFunctionBegin; |
660 |
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.
|
5 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
661 |
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.
|
5 | PetscValidLogicalCollectiveReal(pep,delta,2); |
662 |
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.
|
5 | PetscValidLogicalCollectiveReal(pep,spur,3); |
663 |
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.
|
5 | PetscTryMethod(pep,"PEPCISSSetThreshold_C",(PEP,PetscReal,PetscReal),(pep,delta,spur)); |
664 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
665 | } | ||
666 | |||
667 | 65 | static PetscErrorCode PEPCISSGetThreshold_CISS(PEP pep,PetscReal *delta,PetscReal *spur) | |
668 | { | ||
669 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
670 | |||
671 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
672 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (delta) *delta = ctx->delta; |
673 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (spur) *spur = ctx->spurious_threshold; |
674 |
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); |
675 | } | ||
676 | |||
677 | /*@ | ||
678 | PEPCISSGetThreshold - Gets the values of various threshold parameters in | ||
679 | the CISS solver. | ||
680 | |||
681 | Not Collective | ||
682 | |||
683 | Input Parameter: | ||
684 | . pep - the polynomial eigensolver context | ||
685 | |||
686 | Output Parameters: | ||
687 | + delta - threshold for numerical rank | ||
688 | - spur - spurious threshold (to discard spurious eigenpairs) | ||
689 | |||
690 | Level: advanced | ||
691 | |||
692 | .seealso: PEPCISSSetThreshold() | ||
693 | @*/ | ||
694 | 65 | PetscErrorCode PEPCISSGetThreshold(PEP pep,PetscReal *delta,PetscReal *spur) | |
695 | { | ||
696 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
697 |
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(pep,PEP_CLASSID,1); |
698 |
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(pep,"PEPCISSGetThreshold_C",(PEP,PetscReal*,PetscReal*),(pep,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.
|
65 | PetscFunctionReturn(PETSC_SUCCESS); |
700 | } | ||
701 | |||
702 | 15 | static PetscErrorCode PEPCISSSetRefinement_CISS(PEP pep,PetscInt inner,PetscInt blsize) | |
703 | { | ||
704 | 15 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
705 | |||
706 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
707 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (inner == PETSC_DETERMINE) { |
708 | ✗ | ctx->refine_inner = 0; | |
709 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (inner != PETSC_CURRENT) { |
710 |
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)pep),PETSC_ERR_ARG_OUTOFRANGE,"The refine inner argument must be >= 0"); |
711 | 15 | ctx->refine_inner = inner; | |
712 | } | ||
713 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
15 | if (blsize == PETSC_DETERMINE) { |
714 | ✗ | ctx->refine_blocksize = 0; | |
715 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
15 | } else if (blsize != PETSC_CURRENT) { |
716 |
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)pep),PETSC_ERR_ARG_OUTOFRANGE,"The refine blocksize argument must be >= 0"); |
717 | 15 | ctx->refine_blocksize = blsize; | |
718 | } | ||
719 |
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); |
720 | } | ||
721 | |||
722 | /*@ | ||
723 | PEPCISSSetRefinement - Sets the values of various refinement parameters | ||
724 | in the CISS solver. | ||
725 | |||
726 | Logically Collective | ||
727 | |||
728 | Input Parameters: | ||
729 | + pep - the polynomial eigensolver context | ||
730 | . inner - number of iterative refinement iterations (inner loop) | ||
731 | - blsize - number of iterative refinement iterations (blocksize loop) | ||
732 | |||
733 | Options Database Keys: | ||
734 | + -pep_ciss_refine_inner - Sets number of inner iterations | ||
735 | - -pep_ciss_refine_blocksize - Sets number of blocksize iterations | ||
736 | |||
737 | Note: | ||
738 | PETSC_CURRENT can be used to preserve the current value of any of the | ||
739 | arguments, and PETSC_DETERMINE to set them to a default value. | ||
740 | |||
741 | Level: advanced | ||
742 | |||
743 | .seealso: PEPCISSGetRefinement() | ||
744 | @*/ | ||
745 | 15 | PetscErrorCode PEPCISSSetRefinement(PEP pep,PetscInt inner,PetscInt blsize) | |
746 | { | ||
747 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
15 | PetscFunctionBegin; |
748 |
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(pep,PEP_CLASSID,1); |
749 |
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(pep,inner,2); |
750 |
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(pep,blsize,3); |
751 |
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(pep,"PEPCISSSetRefinement_C",(PEP,PetscInt,PetscInt),(pep,inner,blsize)); |
752 |
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); |
753 | } | ||
754 | |||
755 | 65 | static PetscErrorCode PEPCISSGetRefinement_CISS(PEP pep,PetscInt *inner,PetscInt *blsize) | |
756 | { | ||
757 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
758 | |||
759 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
760 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (inner) *inner = ctx->refine_inner; |
761 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (blsize) *blsize = ctx->refine_blocksize; |
762 |
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); |
763 | } | ||
764 | |||
765 | /*@ | ||
766 | PEPCISSGetRefinement - Gets the values of various refinement parameters | ||
767 | in the CISS solver. | ||
768 | |||
769 | Not Collective | ||
770 | |||
771 | Input Parameter: | ||
772 | . pep - the polynomial eigensolver context | ||
773 | |||
774 | Output Parameters: | ||
775 | + inner - number of iterative refinement iterations (inner loop) | ||
776 | - blsize - number of iterative refinement iterations (blocksize loop) | ||
777 | |||
778 | Level: advanced | ||
779 | |||
780 | .seealso: PEPCISSSetRefinement() | ||
781 | @*/ | ||
782 | 65 | PetscErrorCode PEPCISSGetRefinement(PEP pep, PetscInt *inner, PetscInt *blsize) | |
783 | { | ||
784 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
785 |
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(pep,PEP_CLASSID,1); |
786 |
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(pep,"PEPCISSGetRefinement_C",(PEP,PetscInt*,PetscInt*),(pep,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.
|
65 | PetscFunctionReturn(PETSC_SUCCESS); |
788 | } | ||
789 | |||
790 | 20 | static PetscErrorCode PEPCISSSetExtraction_CISS(PEP pep,PEPCISSExtraction extraction) | |
791 | { | ||
792 | 20 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
793 | |||
794 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
795 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
20 | if (ctx->extraction != extraction) { |
796 | 15 | ctx->extraction = extraction; | |
797 | 15 | pep->state = PEP_STATE_INITIAL; | |
798 | } | ||
799 |
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.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
800 | } | ||
801 | |||
802 | /*@ | ||
803 | PEPCISSSetExtraction - Sets the extraction technique used in the CISS solver. | ||
804 | |||
805 | Logically Collective | ||
806 | |||
807 | Input Parameters: | ||
808 | + pep - the polynomial eigensolver context | ||
809 | - extraction - the extraction technique | ||
810 | |||
811 | Options Database Key: | ||
812 | . -pep_ciss_extraction - Sets the extraction technique (either 'ritz', 'hankel' or 'caa') | ||
813 | |||
814 | Notes: | ||
815 | By default, the Rayleigh-Ritz extraction is used (PEP_CISS_EXTRACTION_RITZ). | ||
816 | |||
817 | If the 'hankel' or the 'caa' option is specified (PEP_CISS_EXTRACTION_HANKEL or | ||
818 | PEP_CISS_EXTRACTION_CAA), then the Block Hankel method, or the Communication-avoiding | ||
819 | Arnoldi method, respectively, is used for extracting eigenpairs. | ||
820 | |||
821 | Level: advanced | ||
822 | |||
823 | .seealso: PEPCISSGetExtraction(), PEPCISSExtraction | ||
824 | @*/ | ||
825 | 20 | PetscErrorCode PEPCISSSetExtraction(PEP pep,PEPCISSExtraction extraction) | |
826 | { | ||
827 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
828 |
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.
|
20 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
829 |
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.
|
20 | PetscValidLogicalCollectiveEnum(pep,extraction,2); |
830 |
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.
|
20 | PetscTryMethod(pep,"PEPCISSSetExtraction_C",(PEP,PEPCISSExtraction),(pep,extraction)); |
831 |
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.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
832 | } | ||
833 | |||
834 | 5 | static PetscErrorCode PEPCISSGetExtraction_CISS(PEP pep,PEPCISSExtraction *extraction) | |
835 | { | ||
836 | 5 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
837 | |||
838 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
5 | PetscFunctionBegin; |
839 | 5 | *extraction = ctx->extraction; | |
840 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
841 | } | ||
842 | |||
843 | /*@ | ||
844 | PEPCISSGetExtraction - Gets the extraction technique used in the CISS solver. | ||
845 | |||
846 | Not Collective | ||
847 | |||
848 | Input Parameter: | ||
849 | . pep - the polynomial eigensolver context | ||
850 | |||
851 | Output Parameters: | ||
852 | . extraction - extraction technique | ||
853 | |||
854 | Level: advanced | ||
855 | |||
856 | .seealso: PEPCISSSetExtraction() PEPCISSExtraction | ||
857 | @*/ | ||
858 | 5 | PetscErrorCode PEPCISSGetExtraction(PEP pep,PEPCISSExtraction *extraction) | |
859 | { | ||
860 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
5 | PetscFunctionBegin; |
861 |
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.
|
5 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
862 |
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.
|
5 | PetscAssertPointer(extraction,2); |
863 |
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.
|
5 | PetscUseMethod(pep,"PEPCISSGetExtraction_C",(PEP,PEPCISSExtraction*),(pep,extraction)); |
864 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
865 | } | ||
866 | |||
867 | 65 | static PetscErrorCode PEPCISSGetKSPs_CISS(PEP pep,PetscInt *nsolve,KSP **ksp) | |
868 | { | ||
869 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
870 | 65 | SlepcContourData contour; | |
871 | 65 | PetscInt i,nsplit; | |
872 | 65 | PC pc; | |
873 | 65 | MPI_Comm child; | |
874 | |||
875 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
876 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (!ctx->contour) { /* initialize contour data structure first */ |
877 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(RGCanUseConjugates(pep->rg,ctx->isreal,&ctx->useconj)); |
878 |
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.
|
65 | PetscCall(SlepcContourDataCreate(ctx->useconj?ctx->N/2:ctx->N,ctx->npart,(PetscObject)pep,&ctx->contour)); |
879 | } | ||
880 | 65 | contour = ctx->contour; | |
881 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
65 | if (!contour->ksp) { |
882 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscMalloc1(contour->npoints,&contour->ksp)); |
883 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PEPGetST(pep,&pep->st)); |
884 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(STGetSplitPreconditionerInfo(pep->st,&nsplit,NULL)); |
885 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscSubcommGetChild(contour->subcomm,&child)); |
886 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1925 | for (i=0;i<contour->npoints;i++) { |
887 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(KSPCreate(child,&contour->ksp[i])); |
888 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)contour->ksp[i],(PetscObject)pep,1)); |
889 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(KSPSetOptionsPrefix(contour->ksp[i],((PetscObject)pep)->prefix)); |
890 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(KSPAppendOptionsPrefix(contour->ksp[i],"pep_ciss_")); |
891 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(PetscObjectSetOptions((PetscObject)contour->ksp[i],((PetscObject)pep)->options)); |
892 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(KSPSetErrorIfNotConverged(contour->ksp[i],PETSC_TRUE)); |
893 |
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.
|
3560 | PetscCall(KSPSetTolerances(contour->ksp[i],SlepcDefaultTol(pep->tol),PETSC_CURRENT,PETSC_CURRENT,PETSC_CURRENT)); |
894 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(KSPGetPC(contour->ksp[i],&pc)); |
895 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1860 | if (nsplit) { |
896 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
320 | PetscCall(KSPSetType(contour->ksp[i],KSPBCGS)); |
897 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
320 | PetscCall(PCSetType(pc,PCBJACOBI)); |
898 | } else { | ||
899 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1540 | PetscCall(KSPSetType(contour->ksp[i],KSPPREONLY)); |
900 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
1860 | PetscCall(PCSetType(pc,PCLU)); |
901 | } | ||
902 | } | ||
903 | } | ||
904 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (nsolve) *nsolve = contour->npoints; |
905 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
65 | if (ksp) *ksp = contour->ksp; |
906 |
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.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
907 | } | ||
908 | |||
909 | /*@C | ||
910 | PEPCISSGetKSPs - Retrieve the array of linear solver objects associated with | ||
911 | the CISS solver. | ||
912 | |||
913 | Collective | ||
914 | |||
915 | Input Parameter: | ||
916 | . pep - polynomial eigenvalue solver | ||
917 | |||
918 | Output Parameters: | ||
919 | + nsolve - number of solver objects | ||
920 | - ksp - array of linear solver object | ||
921 | |||
922 | Notes: | ||
923 | The number of KSP solvers is equal to the number of integration points divided by | ||
924 | the number of partitions. This value is halved in the case of real matrices with | ||
925 | a region centered at the real axis. | ||
926 | |||
927 | Level: advanced | ||
928 | |||
929 | .seealso: PEPCISSSetSizes() | ||
930 | @*/ | ||
931 | 65 | PetscErrorCode PEPCISSGetKSPs(PEP pep,PetscInt *nsolve,KSP **ksp) | |
932 | { | ||
933 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
934 |
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(pep,PEP_CLASSID,1); |
935 |
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(pep,"PEPCISSGetKSPs_C",(PEP,PetscInt*,KSP**),(pep,nsolve,ksp)); |
936 |
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); |
937 | } | ||
938 | |||
939 | 65 | static PetscErrorCode PEPReset_CISS(PEP pep) | |
940 | { | ||
941 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
942 | |||
943 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
944 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVDestroy(&ctx->S)); |
945 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVDestroy(&ctx->V)); |
946 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVDestroy(&ctx->Y)); |
947 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(SlepcContourDataReset(ctx->contour)); |
948 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(MatDestroy(&ctx->J)); |
949 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(BVDestroy(&ctx->pV)); |
950 |
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.
|
65 | PetscCall(PetscFree(ctx->Psplit)); |
951 |
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.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
952 | } | ||
953 | |||
954 | 65 | static PetscErrorCode PEPSetFromOptions_CISS(PEP pep,PetscOptionItems PetscOptionsObject) | |
955 | { | ||
956 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
957 | 65 | PetscReal r1,r2; | |
958 | 65 | PetscInt i,i1,i2,i3,i4,i5,i6,i7; | |
959 | 65 | PetscBool b1,flg,flg2,flg3,flg4,flg5,flg6; | |
960 | 65 | PEPCISSExtraction extraction; | |
961 | |||
962 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
963 |
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.
|
65 | PetscOptionsHeadBegin(PetscOptionsObject,"PEP CISS Options"); |
964 | |||
965 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PEPCISSGetSizes(pep,&i1,&i2,&i3,&i4,&i5,&b1)); |
966 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsInt("-pep_ciss_integration_points","Number of integration points","PEPCISSSetSizes",i1,&i1,&flg)); |
967 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsInt("-pep_ciss_blocksize","Block size","PEPCISSSetSizes",i2,&i2,&flg2)); |
968 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsInt("-pep_ciss_moments","Moment size","PEPCISSSetSizes",i3,&i3,&flg3)); |
969 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsInt("-pep_ciss_partitions","Number of partitions","PEPCISSSetSizes",i4,&i4,&flg4)); |
970 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsInt("-pep_ciss_maxblocksize","Maximum block size","PEPCISSSetSizes",i5,&i5,&flg5)); |
971 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsBool("-pep_ciss_realmats","True if all coefficient matrices of P(.) are real","PEPCISSSetSizes",b1,&b1,&flg6)); |
972 |
14/18✓ 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.
✓ 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.
|
65 | if (flg || flg2 || flg3 || flg4 || flg5 || flg6) PetscCall(PEPCISSSetSizes(pep,i1,i2,i3,i4,i5,b1)); |
973 | |||
974 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PEPCISSGetThreshold(pep,&r1,&r2)); |
975 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsReal("-pep_ciss_delta","Threshold for numerical rank","PEPCISSSetThreshold",r1,&r1,&flg)); |
976 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsReal("-pep_ciss_spurious_threshold","Threshold for the spurious eigenpairs","PEPCISSSetThreshold",r2,&r2,&flg2)); |
977 |
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.
|
65 | if (flg || flg2) PetscCall(PEPCISSSetThreshold(pep,r1,r2)); |
978 | |||
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.
|
65 | PetscCall(PEPCISSGetRefinement(pep,&i6,&i7)); |
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.
|
65 | PetscCall(PetscOptionsInt("-pep_ciss_refine_inner","Number of inner iterative refinement iterations","PEPCISSSetRefinement",i6,&i6,&flg)); |
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.
|
65 | PetscCall(PetscOptionsInt("-pep_ciss_refine_blocksize","Number of blocksize iterative refinement iterations","PEPCISSSetRefinement",i7,&i7,&flg2)); |
982 |
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.
|
65 | if (flg || flg2) PetscCall(PEPCISSSetRefinement(pep,i6,i7)); |
983 | |||
984 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscOptionsEnum("-pep_ciss_extraction","Extraction technique","PEPCISSSetExtraction",PEPCISSExtractions,(PetscEnum)ctx->extraction,(PetscEnum*)&extraction,&flg)); |
985 |
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.
|
65 | if (flg) PetscCall(PEPCISSSetExtraction(pep,extraction)); |
986 | |||
987 |
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.
|
65 | PetscOptionsHeadEnd(); |
988 | |||
989 |
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.
|
65 | if (!pep->rg) PetscCall(PEPGetRG(pep,&pep->rg)); |
990 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(RGSetFromOptions(pep->rg)); /* this is necessary here to set useconj */ |
991 |
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.
|
65 | if (!ctx->contour || !ctx->contour->ksp) PetscCall(PEPCISSGetKSPs(pep,NULL,NULL)); |
992 |
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.
|
13 | PetscAssert(ctx->contour && ctx->contour->ksp,PetscObjectComm((PetscObject)pep),PETSC_ERR_PLIB,"Something went wrong with PEPCISSGetKSPs()"); |
993 |
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.
|
1925 | for (i=0;i<ctx->contour->npoints;i++) PetscCall(KSPSetFromOptions(ctx->contour->ksp[i])); |
994 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscSubcommSetFromOptions(ctx->contour->subcomm)); |
995 |
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.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
996 | } | ||
997 | |||
998 | 65 | static PetscErrorCode PEPDestroy_CISS(PEP pep) | |
999 | { | ||
1000 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
1001 | |||
1002 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
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.
|
65 | PetscCall(SlepcContourDataDestroy(&ctx->contour)); |
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.
|
65 | PetscCall(PetscFree4(ctx->weight,ctx->omega,ctx->pp,ctx->sigma)); |
1005 |
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.
|
65 | PetscCall(PetscFree(pep->data)); |
1006 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSSetSizes_C",NULL)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetSizes_C",NULL)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSSetThreshold_C",NULL)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetThreshold_C",NULL)); |
1010 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSSetRefinement_C",NULL)); |
1011 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetRefinement_C",NULL)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSSetExtraction_C",NULL)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetExtraction_C",NULL)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetKSPs_C",NULL)); |
1015 |
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.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
1016 | } | ||
1017 | |||
1018 | ✗ | static PetscErrorCode PEPView_CISS(PEP pep,PetscViewer viewer) | |
1019 | { | ||
1020 | ✗ | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
1021 | ✗ | PetscBool isascii; | |
1022 | ✗ | PetscViewer sviewer; | |
1023 | |||
1024 | ✗ | PetscFunctionBegin; | |
1025 | ✗ | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); | |
1026 | ✗ | if (isascii) { | |
1027 | ✗ | 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)); | |
1028 | ✗ | if (ctx->isreal) PetscCall(PetscViewerASCIIPrintf(viewer," exploiting symmetry of integration points\n")); | |
1029 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer," threshold { delta: %g, spurious threshold: %g }\n",(double)ctx->delta,(double)ctx->spurious_threshold)); | |
1030 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer," iterative refinement { inner: %" PetscInt_FMT ", blocksize: %" PetscInt_FMT " }\n",ctx->refine_inner, ctx->refine_blocksize)); | |
1031 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer," extraction: %s\n",PEPCISSExtractions[ctx->extraction])); | |
1032 | ✗ | if (!ctx->contour || !ctx->contour->ksp) PetscCall(PEPCISSGetKSPs(pep,NULL,NULL)); | |
1033 | ✗ | PetscAssert(ctx->contour && ctx->contour->ksp,PetscObjectComm((PetscObject)pep),PETSC_ERR_PLIB,"Something went wrong with PEPCISSGetKSPs()"); | |
1034 | ✗ | PetscCall(PetscViewerASCIIPushTab(viewer)); | |
1035 | ✗ | if (ctx->npart>1 && ctx->contour->subcomm) { | |
1036 | ✗ | PetscCall(PetscViewerGetSubViewer(viewer,ctx->contour->subcomm->child,&sviewer)); | |
1037 | ✗ | if (!ctx->contour->subcomm->color) PetscCall(KSPView(ctx->contour->ksp[0],sviewer)); | |
1038 | ✗ | PetscCall(PetscViewerFlush(sviewer)); | |
1039 | ✗ | PetscCall(PetscViewerRestoreSubViewer(viewer,ctx->contour->subcomm->child,&sviewer)); | |
1040 | /* extra call needed because of the two calls to PetscViewerASCIIPushSynchronized() in PetscViewerGetSubViewer() */ | ||
1041 | ✗ | PetscCall(PetscViewerASCIIPopSynchronized(viewer)); | |
1042 | ✗ | } else PetscCall(KSPView(ctx->contour->ksp[0],viewer)); | |
1043 | ✗ | PetscCall(PetscViewerASCIIPopTab(viewer)); | |
1044 | } | ||
1045 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
1046 | } | ||
1047 | |||
1048 | 130 | static PetscErrorCode PEPSetDSType_CISS(PEP pep) | |
1049 | { | ||
1050 | 130 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
1051 | |||
1052 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
130 | PetscFunctionBegin; |
1053 |
3/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
|
130 | switch (ctx->extraction) { |
1054 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
100 | case PEP_CISS_EXTRACTION_RITZ: PetscCall(DSSetType(pep->ds,DSPEP)); break; |
1055 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
20 | case PEP_CISS_EXTRACTION_HANKEL: PetscCall(DSSetType(pep->ds,DSGNHEP)); break; |
1056 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
10 | case PEP_CISS_EXTRACTION_CAA: PetscCall(DSSetType(pep->ds,DSNHEP)); break; |
1057 | } | ||
1058 |
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.
|
26 | PetscFunctionReturn(PETSC_SUCCESS); |
1059 | } | ||
1060 | |||
1061 | 65 | SLEPC_EXTERN PetscErrorCode PEPCreate_CISS(PEP pep) | |
1062 | { | ||
1063 | 65 | PEP_CISS *ctx = (PEP_CISS*)pep->data; | |
1064 | |||
1065 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
1066 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscNew(&ctx)); |
1067 | 65 | pep->data = ctx; | |
1068 | /* set default values of parameters */ | ||
1069 | 65 | ctx->N = 32; | |
1070 | 65 | ctx->L = 16; | |
1071 | 65 | ctx->M = ctx->N/4; | |
1072 | 65 | ctx->delta = SLEPC_DEFAULT_TOL*1e-4; | |
1073 | 65 | ctx->L_max = 64; | |
1074 | 65 | ctx->spurious_threshold = PetscSqrtReal(SLEPC_DEFAULT_TOL); | |
1075 | 65 | ctx->isreal = PETSC_FALSE; | |
1076 | 65 | ctx->npart = 1; | |
1077 | |||
1078 | 65 | pep->ops->solve = PEPSolve_CISS; | |
1079 | 65 | pep->ops->setup = PEPSetUp_CISS; | |
1080 | 65 | pep->ops->setfromoptions = PEPSetFromOptions_CISS; | |
1081 | 65 | pep->ops->reset = PEPReset_CISS; | |
1082 | 65 | pep->ops->destroy = PEPDestroy_CISS; | |
1083 | 65 | pep->ops->view = PEPView_CISS; | |
1084 | 65 | pep->ops->setdstype = PEPSetDSType_CISS; | |
1085 | |||
1086 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSSetSizes_C",PEPCISSSetSizes_CISS)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetSizes_C",PEPCISSGetSizes_CISS)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSSetThreshold_C",PEPCISSSetThreshold_CISS)); |
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.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetThreshold_C",PEPCISSGetThreshold_CISS)); |
1090 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSSetRefinement_C",PEPCISSSetRefinement_CISS)); |
1091 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetRefinement_C",PEPCISSGetRefinement_CISS)); |
1092 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSSetExtraction_C",PEPCISSSetExtraction_CISS)); |
1093 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetExtraction_C",PEPCISSGetExtraction_CISS)); |
1094 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
65 | PetscCall(PetscObjectComposeFunction((PetscObject)pep,"PEPCISSGetKSPs_C",PEPCISSGetKSPs_CISS)); |
1095 |
6/12✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
1096 | } | ||
1097 |