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 | EPS routines related to problem setup | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/epsimpl.h> /*I "slepceps.h" I*/ | ||
15 | |||
16 | /* | ||
17 | Let the solver choose the ST type that should be used by default, | ||
18 | otherwise set it to SHIFT. | ||
19 | This is called at EPSSetFromOptions (before STSetFromOptions) | ||
20 | and also at EPSSetUp (in case EPSSetFromOptions was not called). | ||
21 | */ | ||
22 | 16359 | PetscErrorCode EPSSetDefaultST(EPS eps) | |
23 | { | ||
24 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16359 | PetscFunctionBegin; |
25 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
16359 | PetscTryTypeMethod(eps,setdefaultst); |
26 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
16359 | if (!((PetscObject)eps->st)->type_name) PetscCall(STSetType(eps->st,STSHIFT)); |
27 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
3164 | PetscFunctionReturn(PETSC_SUCCESS); |
28 | } | ||
29 | |||
30 | /* | ||
31 | This is done by preconditioned eigensolvers that use the PC only. | ||
32 | It sets STPRECOND with KSPPREONLY. | ||
33 | */ | ||
34 | 1048 | PetscErrorCode EPSSetDefaultST_Precond(EPS eps) | |
35 | { | ||
36 | 1048 | KSP ksp; | |
37 | |||
38 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1048 | PetscFunctionBegin; |
39 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
1048 | if (!((PetscObject)eps->st)->type_name) PetscCall(STSetType(eps->st,STPRECOND)); |
40 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(STGetKSP(eps->st,&ksp)); |
41 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
1048 | if (!((PetscObject)ksp)->type_name) PetscCall(KSPSetType(ksp,KSPPREONLY)); |
42 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
208 | PetscFunctionReturn(PETSC_SUCCESS); |
43 | } | ||
44 | |||
45 | /* | ||
46 | This is done by preconditioned eigensolvers that can also use the KSP. | ||
47 | It sets STPRECOND with the default KSP (GMRES) and maxit=5. | ||
48 | */ | ||
49 | 952 | PetscErrorCode EPSSetDefaultST_GMRES(EPS eps) | |
50 | { | ||
51 | 952 | KSP ksp; | |
52 | |||
53 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
952 | PetscFunctionBegin; |
54 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
952 | if (!((PetscObject)eps->st)->type_name) PetscCall(STSetType(eps->st,STPRECOND)); |
55 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
952 | PetscCall(STPrecondSetKSPHasMat(eps->st,PETSC_TRUE)); |
56 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
952 | PetscCall(STGetKSP(eps->st,&ksp)); |
57 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
952 | if (!((PetscObject)ksp)->type_name) { |
58 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
391 | PetscCall(KSPSetType(ksp,KSPGMRES)); |
59 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
391 | PetscCall(KSPSetTolerances(ksp,PETSC_CURRENT,PETSC_CURRENT,PETSC_CURRENT,5)); |
60 | } | ||
61 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
216 | PetscFunctionReturn(PETSC_SUCCESS); |
62 | } | ||
63 | |||
64 | #if defined(SLEPC_HAVE_SCALAPACK) || defined(SLEPC_HAVE_ELPA) || defined(SLEPC_HAVE_ELEMENTAL) || defined(SLEPC_HAVE_EVSL) | ||
65 | /* | ||
66 | This is for direct eigensolvers that work with A and B directly, so | ||
67 | no need to factorize B. | ||
68 | */ | ||
69 | 192 | PetscErrorCode EPSSetDefaultST_NoFactor(EPS eps) | |
70 | { | ||
71 | 192 | KSP ksp; | |
72 | 192 | PC pc; | |
73 | |||
74 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
192 | PetscFunctionBegin; |
75 |
6/8✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
192 | if (!((PetscObject)eps->st)->type_name) PetscCall(STSetType(eps->st,STSHIFT)); |
76 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
192 | PetscCall(STGetKSP(eps->st,&ksp)); |
77 |
6/8✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
192 | if (!((PetscObject)ksp)->type_name) PetscCall(KSPSetType(ksp,KSPPREONLY)); |
78 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
192 | PetscCall(KSPGetPC(ksp,&pc)); |
79 |
6/8✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
192 | if (!((PetscObject)pc)->type_name) PetscCall(PCSetType(pc,PCNONE)); |
80 |
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.
|
24 | PetscFunctionReturn(PETSC_SUCCESS); |
81 | } | ||
82 | #endif | ||
83 | |||
84 | /* | ||
85 | Check that the ST selected by the user is compatible with the EPS solver and options | ||
86 | */ | ||
87 | 9742 | static PetscErrorCode EPSCheckCompatibleST(EPS eps) | |
88 | { | ||
89 | 9742 | PetscBool precond,shift,sinvert,cayley,lyapii; | |
90 | #if defined(PETSC_USE_COMPLEX) | ||
91 | 4670 | PetscScalar sigma; | |
92 | #endif | ||
93 | |||
94 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
9742 | PetscFunctionBegin; |
95 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(PetscObjectTypeCompare((PetscObject)eps->st,STPRECOND,&precond)); |
96 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(PetscObjectTypeCompare((PetscObject)eps->st,STSHIFT,&shift)); |
97 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(PetscObjectTypeCompare((PetscObject)eps->st,STSINVERT,&sinvert)); |
98 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(PetscObjectTypeCompare((PetscObject)eps->st,STCAYLEY,&cayley)); |
99 | |||
100 | /* preconditioned eigensolvers */ | ||
101 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
9742 | PetscCheck(eps->categ!=EPS_CATEGORY_PRECOND || precond,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"This solver requires ST=PRECOND"); |
102 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
9742 | PetscCheck(eps->categ==EPS_CATEGORY_PRECOND || !precond,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"STPRECOND is intended for preconditioned eigensolvers only"); |
103 | |||
104 | /* harmonic extraction */ | ||
105 |
5/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
9742 | PetscCheck(precond || shift || !eps->extraction || eps->extraction==EPS_RITZ,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Cannot use a spectral transformation combined with harmonic extraction"); |
106 | |||
107 | /* real shifts in Hermitian problems */ | ||
108 | #if defined(PETSC_USE_COMPLEX) | ||
109 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
4670 | PetscCall(STGetShift(eps->st,&sigma)); |
110 |
3/6✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
4670 | PetscCheck(!eps->ishermitian || PetscImaginaryPart(sigma)==0.0,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Hermitian problems are not compatible with complex shifts"); |
111 | #endif | ||
112 | |||
113 | /* Cayley with PGNHEP */ | ||
114 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
9742 | PetscCheck(!cayley || eps->problem_type!=EPS_PGNHEP,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Cayley spectral transformation is not compatible with PGNHEP"); |
115 | |||
116 | /* make sure that the user does not specify smallest magnitude with shift-and-invert */ | ||
117 |
6/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
|
9742 | if ((cayley || sinvert) && (eps->categ==EPS_CATEGORY_KRYLOV || eps->categ==EPS_CATEGORY_OTHER)) { |
118 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1292 | PetscCall(PetscObjectTypeCompare((PetscObject)eps,EPSLYAPII,&lyapii)); |
119 |
10/14✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 10 times.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 10 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
1292 | PetscCheck(lyapii || eps->which==EPS_TARGET_MAGNITUDE || eps->which==EPS_TARGET_REAL || eps->which==EPS_TARGET_IMAGINARY || eps->which==EPS_ALL || eps->which==EPS_WHICH_USER,PetscObjectComm((PetscObject)eps),PETSC_ERR_USER_INPUT,"Shift-and-invert requires a target 'which' (see EPSSetWhichEigenpairs), for instance -st_type sinvert -eps_target 0 -eps_target_magnitude"); |
120 | } | ||
121 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1874 | PetscFunctionReturn(PETSC_SUCCESS); |
122 | } | ||
123 | |||
124 | /* | ||
125 | MatEstimateSpectralRange_EPS: estimate the spectral range [left,right] of a | ||
126 | symmetric/Hermitian matrix A using an auxiliary EPS object | ||
127 | */ | ||
128 | 146 | PetscErrorCode MatEstimateSpectralRange_EPS(Mat A,PetscReal *left,PetscReal *right) | |
129 | { | ||
130 | 146 | PetscInt nconv; | |
131 | 146 | PetscScalar eig0; | |
132 | 146 | PetscReal tol=1e-3,errest=tol; | |
133 | 146 | EPS eps; | |
134 | |||
135 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
146 | PetscFunctionBegin; |
136 | 146 | *left = 0.0; *right = 0.0; | |
137 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSCreate(PetscObjectComm((PetscObject)A),&eps)); |
138 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetOptionsPrefix(eps,"eps_filter_")); |
139 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetOperators(eps,A,NULL)); |
140 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetProblemType(eps,EPS_HEP)); |
141 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetTolerances(eps,tol,50)); |
142 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_ABS)); |
143 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_REAL)); |
144 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSolve(eps)); |
145 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSGetConverged(eps,&nconv)); |
146 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
146 | if (nconv>0) { |
147 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSGetEigenvalue(eps,0,&eig0,NULL)); |
148 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSGetErrorEstimate(eps,0,&errest)); |
149 | ✗ | } else eig0 = eps->eigr[0]; | |
150 | 146 | *left = PetscRealPart(eig0)-errest; | |
151 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_REAL)); |
152 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSolve(eps)); |
153 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSGetConverged(eps,&nconv)); |
154 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
146 | if (nconv>0) { |
155 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSGetEigenvalue(eps,0,&eig0,NULL)); |
156 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSGetErrorEstimate(eps,0,&errest)); |
157 | ✗ | } else eig0 = eps->eigr[0]; | |
158 | 146 | *right = PetscRealPart(eig0)+errest; | |
159 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSDestroy(&eps)); |
160 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
26 | PetscFunctionReturn(PETSC_SUCCESS); |
161 | } | ||
162 | |||
163 | /* | ||
164 | EPSSetUpSort_Basic: configure the EPS sorting criterion according to 'which' | ||
165 | */ | ||
166 | 9137 | PetscErrorCode EPSSetUpSort_Basic(EPS eps) | |
167 | { | ||
168 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
9137 | PetscFunctionBegin; |
169 |
11/11✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 8 taken 5 times.
✓ Branch 9 taken 10 times.
✓ Branch 10 taken 10 times.
|
9137 | switch (eps->which) { |
170 | 3760 | case EPS_LARGEST_MAGNITUDE: | |
171 | 3760 | eps->sc->comparison = SlepcCompareLargestMagnitude; | |
172 | 3760 | eps->sc->comparisonctx = NULL; | |
173 | 3760 | break; | |
174 | 322 | case EPS_SMALLEST_MAGNITUDE: | |
175 | 322 | eps->sc->comparison = SlepcCompareSmallestMagnitude; | |
176 | 322 | eps->sc->comparisonctx = NULL; | |
177 | 322 | break; | |
178 | 1185 | case EPS_LARGEST_REAL: | |
179 | 1185 | eps->sc->comparison = SlepcCompareLargestReal; | |
180 | 1185 | eps->sc->comparisonctx = NULL; | |
181 | 1185 | break; | |
182 | 1634 | case EPS_SMALLEST_REAL: | |
183 | 1634 | eps->sc->comparison = SlepcCompareSmallestReal; | |
184 | 1634 | eps->sc->comparisonctx = NULL; | |
185 | 1634 | break; | |
186 | 14 | case EPS_LARGEST_IMAGINARY: | |
187 | 14 | eps->sc->comparison = SlepcCompareLargestImaginary; | |
188 | 14 | eps->sc->comparisonctx = NULL; | |
189 | 14 | break; | |
190 | 10 | case EPS_SMALLEST_IMAGINARY: | |
191 | 10 | eps->sc->comparison = SlepcCompareSmallestImaginary; | |
192 | 10 | eps->sc->comparisonctx = NULL; | |
193 | 10 | break; | |
194 | 1257 | case EPS_TARGET_MAGNITUDE: | |
195 | 1257 | eps->sc->comparison = SlepcCompareTargetMagnitude; | |
196 | 1257 | eps->sc->comparisonctx = &eps->target; | |
197 | 1257 | break; | |
198 | 52 | case EPS_TARGET_REAL: | |
199 | 52 | eps->sc->comparison = SlepcCompareTargetReal; | |
200 | 52 | eps->sc->comparisonctx = &eps->target; | |
201 | 52 | break; | |
202 | 5 | case EPS_TARGET_IMAGINARY: | |
203 | 5 | eps->sc->comparison = SlepcCompareTargetImaginary; | |
204 | 5 | eps->sc->comparisonctx = &eps->target; | |
205 | 5 | break; | |
206 | 645 | case EPS_ALL: | |
207 | 645 | eps->sc->comparison = SlepcCompareSmallestReal; | |
208 | 645 | eps->sc->comparisonctx = NULL; | |
209 | 645 | break; | |
210 | case EPS_WHICH_USER: | ||
211 | break; | ||
212 | } | ||
213 | 9137 | eps->sc->map = NULL; | |
214 | 9137 | eps->sc->mapobj = NULL; | |
215 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
9137 | PetscFunctionReturn(PETSC_SUCCESS); |
216 | } | ||
217 | |||
218 | /* | ||
219 | EPSSetUpSort_Default: configure both EPS and DS sorting criterion | ||
220 | */ | ||
221 | 8883 | PetscErrorCode EPSSetUpSort_Default(EPS eps) | |
222 | { | ||
223 | 8883 | SlepcSC sc; | |
224 | 8883 | PetscBool istrivial; | |
225 | |||
226 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
8883 | PetscFunctionBegin; |
227 | /* fill sorting criterion context */ | ||
228 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8883 | PetscCall(EPSSetUpSort_Basic(eps)); |
229 | /* fill sorting criterion for DS */ | ||
230 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8883 | PetscCall(DSGetSlepcSC(eps->ds,&sc)); |
231 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8883 | PetscCall(RGIsTrivial(eps->rg,&istrivial)); |
232 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
8883 | sc->rg = istrivial? NULL: eps->rg; |
233 | 8883 | sc->comparison = eps->sc->comparison; | |
234 | 8883 | sc->comparisonctx = eps->sc->comparisonctx; | |
235 | 8883 | sc->map = SlepcMap_ST; | |
236 | 8883 | sc->mapobj = (PetscObject)eps->st; | |
237 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
8883 | PetscFunctionReturn(PETSC_SUCCESS); |
238 | } | ||
239 | |||
240 | /*@ | ||
241 | EPSSetDSType - Sets the type of the internal DS object based on the current | ||
242 | settings of the eigenvalue solver. | ||
243 | |||
244 | Collective | ||
245 | |||
246 | Input Parameter: | ||
247 | . eps - eigenproblem solver context | ||
248 | |||
249 | Note: | ||
250 | This function need not be called explicitly, since it will be called at | ||
251 | both EPSSetFromOptions() and EPSSetUp(). | ||
252 | |||
253 | Level: developer | ||
254 | |||
255 | .seealso: EPSSetFromOptions(), EPSSetUp() | ||
256 | @*/ | ||
257 | 15000 | PetscErrorCode EPSSetDSType(EPS eps) | |
258 | { | ||
259 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
15000 | PetscFunctionBegin; |
260 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
15000 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
261 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
15000 | PetscTryTypeMethod(eps,setdstype); |
262 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2876 | PetscFunctionReturn(PETSC_SUCCESS); |
263 | } | ||
264 | |||
265 | /*@ | ||
266 | EPSSetUp - Sets up all the internal data structures necessary for the | ||
267 | execution of the eigensolver. Then calls STSetUp() for any set-up | ||
268 | operations associated to the ST object. | ||
269 | |||
270 | Collective | ||
271 | |||
272 | Input Parameter: | ||
273 | . eps - eigenproblem solver context | ||
274 | |||
275 | Notes: | ||
276 | This function need not be called explicitly in most cases, since EPSSolve() | ||
277 | calls it. It can be useful when one wants to measure the set-up time | ||
278 | separately from the solve time. | ||
279 | |||
280 | Level: developer | ||
281 | |||
282 | .seealso: EPSCreate(), EPSSolve(), EPSDestroy(), STSetUp(), EPSSetInitialSpace() | ||
283 | @*/ | ||
284 | 11582 | PetscErrorCode EPSSetUp(EPS eps) | |
285 | { | ||
286 | 11582 | Mat A,B; | |
287 | 11582 | PetscInt k,nmat; | |
288 | 11582 | PetscBool flg; | |
289 | 11582 | EPSStoppingCtx ctx; | |
290 | |||
291 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
11582 | PetscFunctionBegin; |
292 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
11582 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
293 |
8/14✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
11582 | if (eps->state) PetscFunctionReturn(PETSC_SUCCESS); |
294 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(PetscLogEventBegin(EPS_SetUp,eps,0,0,0)); |
295 | |||
296 | /* reset the convergence flag from the previous solves */ | ||
297 | 9742 | eps->reason = EPS_CONVERGED_ITERATING; | |
298 | |||
299 | /* Set default solver type (EPSSetFromOptions was not called) */ | ||
300 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
9742 | if (!((PetscObject)eps)->type_name) PetscCall(EPSSetType(eps,EPSKRYLOVSCHUR)); |
301 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
9742 | if (!eps->st) PetscCall(EPSGetST(eps,&eps->st)); |
302 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(EPSSetDefaultST(eps)); |
303 | |||
304 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(STSetTransform(eps->st,PETSC_TRUE)); |
305 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(STSetStructured(eps->st,PETSC_FALSE)); |
306 |
8/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
9742 | if (eps->useds && !eps->ds) PetscCall(EPSGetDS(eps,&eps->ds)); |
307 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
9742 | if (eps->useds) PetscCall(EPSSetDSType(eps)); |
308 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->twosided) { |
309 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
209 | PetscCheck(!eps->ishermitian || (eps->isgeneralized && !eps->ispositive),PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Two-sided methods are not intended for %s problems",SLEPC_STRING_HERMITIAN); |
310 | } | ||
311 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
9742 | if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg)); |
312 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
9742 | if (!((PetscObject)eps->rg)->type_name) PetscCall(RGSetType(eps->rg,RGINTERVAL)); |
313 | |||
314 | /* Set problem dimensions */ | ||
315 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(STGetNumMatrices(eps->st,&nmat)); |
316 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
9742 | PetscCheck(nmat,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONGSTATE,"EPSSetOperators must be called first"); |
317 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(STMatGetSize(eps->st,&eps->n,NULL)); |
318 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(STMatGetLocalSize(eps->st,&eps->nloc,NULL)); |
319 | |||
320 | /* Set default problem type */ | ||
321 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (!eps->problem_type) { |
322 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
433 | if (nmat==1) PetscCall(EPSSetProblemType(eps,EPS_NHEP)); |
323 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
41 | else PetscCall(EPSSetProblemType(eps,EPS_GNHEP)); |
324 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 10 times.
|
9309 | } else if (nmat==1 && eps->isgeneralized) { |
325 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
3 | PetscCall(PetscInfo(eps,"Eigenproblem set as generalized but no matrix B was provided; reverting to a standard eigenproblem\n")); |
326 | 3 | eps->isgeneralized = PETSC_FALSE; | |
327 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
6 | eps->problem_type = eps->ishermitian? EPS_HEP: EPS_NHEP; |
328 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
9306 | } else PetscCheck(nmat==1 || eps->isgeneralized,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_INCOMP,"Inconsistent EPS state: the problem type does not match the number of matrices"); |
329 | |||
330 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->isstructured) { |
331 | /* make sure the user has set the appropriate matrix */ | ||
332 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
369 | PetscCall(STGetMatrix(eps->st,0,&A)); |
333 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
369 | if (eps->problem_type==EPS_BSE) PetscCall(SlepcCheckMatStruct(A,SLEPC_MAT_STRUCT_BSE,NULL)); |
334 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
369 | if (eps->problem_type==EPS_HAMILT) PetscCall(SlepcCheckMatStruct(A,SLEPC_MAT_STRUCT_HAMILT,NULL)); |
335 | } | ||
336 | |||
337 | /* safeguard for small problems */ | ||
338 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
9742 | if (eps->n == 0) PetscFunctionReturn(PETSC_SUCCESS); |
339 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->nev > eps->n) eps->nev = eps->n; |
340 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->problem_type == EPS_BSE) { |
341 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
334 | if (2*eps->ncv > eps->n) eps->ncv = eps->n/2; |
342 | } else { | ||
343 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9408 | if (eps->ncv > eps->n) eps->ncv = eps->n; |
344 | } | ||
345 | |||
346 | /* check some combinations of eps->which */ | ||
347 |
7/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
9742 | PetscCheck(!eps->ishermitian || (eps->isgeneralized && !eps->ispositive) || (eps->which!=EPS_LARGEST_IMAGINARY && eps->which!=EPS_SMALLEST_IMAGINARY && eps->which!=EPS_TARGET_IMAGINARY),PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Sorting the eigenvalues along the imaginary axis is not allowed when all eigenvalues are real"); |
348 | |||
349 | /* initialization of matrix norms */ | ||
350 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->conv==EPS_CONV_NORM) { |
351 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
496 | if (!eps->nrma) { |
352 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
496 | PetscCall(STGetMatrix(eps->st,0,&A)); |
353 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
496 | PetscCall(MatNorm(A,NORM_INFINITY,&eps->nrma)); |
354 | } | ||
355 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
496 | if (nmat>1 && !eps->nrmb) { |
356 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
486 | PetscCall(STGetMatrix(eps->st,1,&B)); |
357 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
486 | PetscCall(MatNorm(B,NORM_INFINITY,&eps->nrmb)); |
358 | } | ||
359 | } | ||
360 | |||
361 | /* call specific solver setup */ | ||
362 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
9742 | PetscUseTypeMethod(eps,setup); |
363 | |||
364 | /* threshold stopping test */ | ||
365 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->stop==EPS_STOP_THRESHOLD) { |
366 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | PetscCheck(eps->thres!=PETSC_MIN_REAL,PetscObjectComm((PetscObject)eps),PETSC_ERR_USER_INPUT,"Must give a threshold value with EPSSetThreshold()"); |
367 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | PetscCheck(eps->which==EPS_LARGEST_MAGNITUDE || eps->which==EPS_SMALLEST_MAGNITUDE || eps->which==EPS_LARGEST_REAL || eps->which==EPS_SMALLEST_REAL || eps->which==EPS_TARGET_MAGNITUDE,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Threshold stopping test can only be used with largest/smallest/target magnitude or largest/smallest real selection of eigenvalues"); |
368 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
146 | if (eps->which==EPS_LARGEST_REAL || eps->which==EPS_SMALLEST_REAL) PetscCheck(eps->problem_type==EPS_HEP || eps->problem_type==EPS_GHEP || eps->problem_type==EPS_BSE,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Threshold stopping test with largest/smallest real can only be used in problems that have all eigenvaues real"); |
369 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | else PetscCheck(eps->thres>0.0,PetscObjectComm((PetscObject)eps),PETSC_ERR_USER_INPUT,"In case of largest/smallest/target magnitude the threshold value must be positive"); |
370 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
146 | PetscCheck(eps->which==EPS_LARGEST_MAGNITUDE || eps->which==EPS_TARGET_MAGNITUDE || !eps->threlative,PetscObjectComm((PetscObject)eps),PETSC_ERR_USER_INPUT,"Can only use a relative threshold with largest/target magnitude selection of eigenvalues"); |
371 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(PetscNew(&ctx)); |
372 | 146 | ctx->thres = eps->thres; | |
373 | 146 | ctx->threlative = eps->threlative; | |
374 | 146 | ctx->which = eps->which; | |
375 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetStoppingTestFunction(eps,EPSStoppingThreshold,ctx,PetscCtxDestroyDefault)); |
376 | } | ||
377 | |||
378 | /* if purification is set, check that it really makes sense */ | ||
379 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->purify) { |
380 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6921 | if (eps->categ==EPS_CATEGORY_PRECOND || eps->categ==EPS_CATEGORY_CONTOUR) eps->purify = PETSC_FALSE; |
381 | else { | ||
382 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5259 | if (!eps->isgeneralized) eps->purify = PETSC_FALSE; |
383 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
|
1490 | else if (!eps->ishermitian && !eps->ispositive) eps->purify = PETSC_FALSE; |
384 | else { | ||
385 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1164 | PetscCall(PetscObjectTypeCompare((PetscObject)eps->st,STCAYLEY,&flg)); |
386 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1164 | if (flg) eps->purify = PETSC_FALSE; |
387 | } | ||
388 | } | ||
389 | } | ||
390 | |||
391 | /* set tolerance if not yet set */ | ||
392 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->tol==(PetscReal)PETSC_DETERMINE) eps->tol = SLEPC_DEFAULT_TOL; |
393 | |||
394 | /* set up sorting criterion */ | ||
395 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
9742 | PetscTryTypeMethod(eps,setupsort); |
396 | |||
397 | /* Build balancing matrix if required */ | ||
398 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
9742 | if (eps->balance!=EPS_BALANCE_USER) { |
399 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(STSetBalanceMatrix(eps->st,NULL)); |
400 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
9742 | if (!eps->ishermitian && (eps->balance==EPS_BALANCE_ONESIDE || eps->balance==EPS_BALANCE_TWOSIDE)) { |
401 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
130 | if (!eps->D) PetscCall(BVCreateVec(eps->V,&eps->D)); |
402 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
130 | PetscCall(EPSBuildBalance_Krylov(eps)); |
403 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
130 | PetscCall(STSetBalanceMatrix(eps->st,eps->D)); |
404 | } | ||
405 | } | ||
406 | |||
407 | /* Setup ST */ | ||
408 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(STSetUp(eps->st)); |
409 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(EPSCheckCompatibleST(eps)); |
410 | |||
411 | /* process deflation and initial vectors */ | ||
412 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->nds<0) { |
413 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
148 | PetscCheck(!eps->isstructured,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Deflation space is not supported in structured eigenproblems"); |
414 | 148 | k = -eps->nds; | |
415 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
148 | PetscCall(BVInsertConstraints(eps->V,&k,eps->defl)); |
416 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
148 | PetscCall(SlepcBasisDestroy_Private(&eps->nds,&eps->defl)); |
417 | 148 | eps->nds = k; | |
418 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
148 | PetscCall(STCheckNullSpace(eps->st,eps->V)); |
419 | } | ||
420 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->nini<0) { |
421 | 2553 | k = -eps->nini; | |
422 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2553 | PetscCheck(k<=eps->ncv,PetscObjectComm((PetscObject)eps),PETSC_ERR_USER_INPUT,"The number of initial vectors is larger than ncv"); |
423 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2553 | PetscCall(BVInsertVecs(eps->V,0,&k,eps->IS,PETSC_TRUE)); |
424 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2553 | PetscCall(SlepcBasisDestroy_Private(&eps->nini,&eps->IS)); |
425 | 2553 | eps->nini = k; | |
426 | } | ||
427 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
9742 | if (eps->twosided && eps->ninil<0) { |
428 | 40 | k = -eps->ninil; | |
429 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
40 | PetscCheck(k<=eps->ncv,PetscObjectComm((PetscObject)eps),PETSC_ERR_USER_INPUT,"The number of left initial vectors is larger than ncv"); |
430 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
40 | PetscCall(BVInsertVecs(eps->W,0,&k,eps->ISL,PETSC_TRUE)); |
431 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
40 | PetscCall(SlepcBasisDestroy_Private(&eps->ninil,&eps->ISL)); |
432 | 40 | eps->ninil = k; | |
433 | } | ||
434 | |||
435 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(PetscLogEventEnd(EPS_SetUp,eps,0,0,0)); |
436 | 9742 | eps->state = EPS_STATE_SETUP; | |
437 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
9742 | PetscFunctionReturn(PETSC_SUCCESS); |
438 | } | ||
439 | |||
440 | /*@ | ||
441 | EPSSetOperators - Sets the matrices associated with the eigenvalue problem. | ||
442 | |||
443 | Collective | ||
444 | |||
445 | Input Parameters: | ||
446 | + eps - the eigenproblem solver context | ||
447 | . A - the matrix associated with the eigensystem | ||
448 | - B - the second matrix in the case of generalized eigenproblems | ||
449 | |||
450 | Notes: | ||
451 | To specify a standard eigenproblem, use NULL for parameter B. | ||
452 | |||
453 | It must be called before EPSSetUp(). If it is called again after EPSSetUp() and | ||
454 | the matrix sizes have changed then the EPS object is reset. | ||
455 | |||
456 | For structured eigenproblem types such as EPS_BSE (see EPSSetProblemType()), the | ||
457 | provided matrices must have been created with the corresponding helper function, | ||
458 | i.e., MatCreateBSE(). | ||
459 | |||
460 | Level: beginner | ||
461 | |||
462 | .seealso: EPSSolve(), EPSSetUp(), EPSReset(), EPSGetST(), STGetMatrix(), EPSSetProblemType() | ||
463 | @*/ | ||
464 | 8169 | PetscErrorCode EPSSetOperators(EPS eps,Mat A,Mat B) | |
465 | { | ||
466 | 8169 | PetscInt m,n,m0,mloc,nloc,mloc0,nmat; | |
467 | 8169 | Mat mat[2]; | |
468 | |||
469 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
8169 | PetscFunctionBegin; |
470 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
8169 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
471 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
8169 | PetscValidHeaderSpecific(A,MAT_CLASSID,2); |
472 |
4/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
8169 | if (B) PetscValidHeaderSpecific(B,MAT_CLASSID,3); |
473 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
8169 | PetscCheckSameComm(eps,1,A,2); |
474 |
15/34✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
|
8169 | if (B) PetscCheckSameComm(eps,1,B,3); |
475 | |||
476 | /* Check matrix sizes */ | ||
477 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8169 | PetscCall(MatGetSize(A,&m,&n)); |
478 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8169 | PetscCall(MatGetLocalSize(A,&mloc,&nloc)); |
479 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
8169 | PetscCheck(m==n,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONG,"A is a non-square matrix (%" PetscInt_FMT " rows, %" PetscInt_FMT " cols)",m,n); |
480 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
8169 | PetscCheck(mloc==nloc,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONG,"A does not have equal row and column sizes (%" PetscInt_FMT ", %" PetscInt_FMT ")",mloc,nloc); |
481 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
8169 | if (B) { |
482 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2311 | PetscCall(MatGetSize(B,&m0,&n)); |
483 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2311 | PetscCall(MatGetLocalSize(B,&mloc0,&nloc)); |
484 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2311 | PetscCheck(m0==n,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONG,"B is a non-square matrix (%" PetscInt_FMT " rows, %" PetscInt_FMT " cols)",m0,n); |
485 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2311 | PetscCheck(mloc0==nloc,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONG,"B does not have equal row and column local sizes (%" PetscInt_FMT ", %" PetscInt_FMT ")",mloc0,nloc); |
486 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2311 | PetscCheck(m==m0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_INCOMP,"Dimensions of A and B do not match (%" PetscInt_FMT ", %" PetscInt_FMT ")",m,m0); |
487 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2311 | PetscCheck(mloc==mloc0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_INCOMP,"Local dimensions of A and B do not match (%" PetscInt_FMT ", %" PetscInt_FMT ")",mloc,mloc0); |
488 | } | ||
489 |
10/12✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
8169 | if (eps->state && (n!=eps->n || nloc!=eps->nloc)) PetscCall(EPSReset(eps)); |
490 | 8169 | eps->nrma = 0.0; | |
491 | 8169 | eps->nrmb = 0.0; | |
492 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
8169 | if (!eps->st) PetscCall(EPSGetST(eps,&eps->st)); |
493 | 8169 | mat[0] = A; | |
494 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
8169 | if (B) { |
495 | 2311 | mat[1] = B; | |
496 | 2311 | nmat = 2; | |
497 | } else nmat = 1; | ||
498 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8169 | PetscCall(STSetMatrices(eps->st,nmat,mat)); |
499 | 8169 | eps->state = EPS_STATE_INITIAL; | |
500 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
8169 | PetscFunctionReturn(PETSC_SUCCESS); |
501 | } | ||
502 | |||
503 | /*@ | ||
504 | EPSGetOperators - Gets the matrices associated with the eigensystem. | ||
505 | |||
506 | Collective | ||
507 | |||
508 | Input Parameter: | ||
509 | . eps - the EPS context | ||
510 | |||
511 | Output Parameters: | ||
512 | + A - the matrix associated with the eigensystem | ||
513 | - B - the second matrix in the case of generalized eigenproblems | ||
514 | |||
515 | Note: | ||
516 | Does not increase the reference count of the matrices, so you should not destroy them. | ||
517 | |||
518 | Level: intermediate | ||
519 | |||
520 | .seealso: EPSSolve(), EPSGetST(), STGetMatrix(), STSetMatrices() | ||
521 | @*/ | ||
522 | 11367 | PetscErrorCode EPSGetOperators(EPS eps,Mat *A,Mat *B) | |
523 | { | ||
524 | 11367 | ST st; | |
525 | 11367 | PetscInt k; | |
526 | |||
527 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
11367 | PetscFunctionBegin; |
528 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
11367 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
529 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11367 | PetscCall(EPSGetST(eps,&st)); |
530 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11367 | PetscCall(STGetNumMatrices(st,&k)); |
531 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
11367 | if (A) { |
532 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
5879 | if (k<1) *A = NULL; |
533 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5879 | else PetscCall(STGetMatrix(st,0,A)); |
534 | } | ||
535 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
11367 | if (B) { |
536 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
7273 | if (k<2) *B = NULL; |
537 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6861 | else PetscCall(STGetMatrix(st,1,B)); |
538 | } | ||
539 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2238 | PetscFunctionReturn(PETSC_SUCCESS); |
540 | } | ||
541 | |||
542 | /*@ | ||
543 | EPSSetDeflationSpace - Specify a basis of vectors that constitute the deflation | ||
544 | space. | ||
545 | |||
546 | Collective | ||
547 | |||
548 | Input Parameters: | ||
549 | + eps - the eigenproblem solver context | ||
550 | . n - number of vectors | ||
551 | - v - set of basis vectors of the deflation space | ||
552 | |||
553 | Notes: | ||
554 | When a deflation space is given, the eigensolver seeks the eigensolution | ||
555 | in the restriction of the problem to the orthogonal complement of this | ||
556 | space. This can be used for instance in the case that an invariant | ||
557 | subspace is known beforehand (such as the nullspace of the matrix). | ||
558 | |||
559 | These vectors do not persist from one EPSSolve() call to the other, so the | ||
560 | deflation space should be set every time. | ||
561 | |||
562 | The vectors do not need to be mutually orthonormal, since they are explicitly | ||
563 | orthonormalized internally. | ||
564 | |||
565 | Level: intermediate | ||
566 | |||
567 | .seealso: EPSSetInitialSpace() | ||
568 | @*/ | ||
569 | 161 | PetscErrorCode EPSSetDeflationSpace(EPS eps,PetscInt n,Vec v[]) | |
570 | { | ||
571 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
161 | PetscFunctionBegin; |
572 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
161 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
573 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
161 | PetscValidLogicalCollectiveInt(eps,n,2); |
574 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
161 | PetscCheck(n>=0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Argument n cannot be negative"); |
575 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
161 | if (n>0) { |
576 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
158 | PetscAssertPointer(v,3); |
577 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
158 | PetscValidHeaderSpecific(*v,VEC_CLASSID,3); |
578 | } | ||
579 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
161 | PetscCall(SlepcBasisReference_Private(n,v,&eps->nds,&eps->defl)); |
580 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
|
161 | if (n>0) eps->state = EPS_STATE_INITIAL; |
581 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
31 | PetscFunctionReturn(PETSC_SUCCESS); |
582 | } | ||
583 | |||
584 | /*@ | ||
585 | EPSSetInitialSpace - Specify a basis of vectors that constitute the initial | ||
586 | space, that is, the subspace from which the solver starts to iterate. | ||
587 | |||
588 | Collective | ||
589 | |||
590 | Input Parameters: | ||
591 | + eps - the eigenproblem solver context | ||
592 | . n - number of vectors | ||
593 | - is - set of basis vectors of the initial space | ||
594 | |||
595 | Notes: | ||
596 | Some solvers start to iterate on a single vector (initial vector). In that case, | ||
597 | the other vectors are ignored. | ||
598 | |||
599 | These vectors do not persist from one EPSSolve() call to the other, so the | ||
600 | initial space should be set every time. | ||
601 | |||
602 | The vectors do not need to be mutually orthonormal, since they are explicitly | ||
603 | orthonormalized internally. | ||
604 | |||
605 | Common usage of this function is when the user can provide a rough approximation | ||
606 | of the wanted eigenspace. Then, convergence may be faster. | ||
607 | |||
608 | Level: intermediate | ||
609 | |||
610 | .seealso: EPSSetLeftInitialSpace(), EPSSetDeflationSpace() | ||
611 | @*/ | ||
612 | 2570 | PetscErrorCode EPSSetInitialSpace(EPS eps,PetscInt n,Vec is[]) | |
613 | { | ||
614 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2570 | PetscFunctionBegin; |
615 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
2570 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
616 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
2570 | PetscValidLogicalCollectiveInt(eps,n,2); |
617 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2570 | PetscCheck(n>=0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Argument n cannot be negative"); |
618 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
2570 | if (n>0) { |
619 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
2563 | PetscAssertPointer(is,3); |
620 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
2563 | PetscValidHeaderSpecific(*is,VEC_CLASSID,3); |
621 | } | ||
622 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2570 | PetscCall(SlepcBasisReference_Private(n,is,&eps->nini,&eps->IS)); |
623 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
|
2570 | if (n>0) eps->state = EPS_STATE_INITIAL; |
624 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
478 | PetscFunctionReturn(PETSC_SUCCESS); |
625 | } | ||
626 | |||
627 | /*@ | ||
628 | EPSSetLeftInitialSpace - Specify a basis of vectors that constitute the left | ||
629 | initial space, used by two-sided solvers to start the left subspace. | ||
630 | |||
631 | Collective | ||
632 | |||
633 | Input Parameters: | ||
634 | + eps - the eigenproblem solver context | ||
635 | . n - number of vectors | ||
636 | - isl - set of basis vectors of the left initial space | ||
637 | |||
638 | Notes: | ||
639 | Left initial vectors are used to initiate the left search space in two-sided | ||
640 | eigensolvers. Users should pass here an approximation of the left eigenspace, | ||
641 | if available. | ||
642 | |||
643 | The same comments in EPSSetInitialSpace() are applicable here. | ||
644 | |||
645 | Level: intermediate | ||
646 | |||
647 | .seealso: EPSSetInitialSpace(), EPSSetTwoSided() | ||
648 | @*/ | ||
649 | 40 | PetscErrorCode EPSSetLeftInitialSpace(EPS eps,PetscInt n,Vec isl[]) | |
650 | { | ||
651 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
40 | PetscFunctionBegin; |
652 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
40 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
653 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
40 | PetscValidLogicalCollectiveInt(eps,n,2); |
654 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
40 | PetscCheck(n>=0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Argument n cannot be negative"); |
655 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
40 | if (n>0) { |
656 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
40 | PetscAssertPointer(isl,3); |
657 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
40 | PetscValidHeaderSpecific(*isl,VEC_CLASSID,3); |
658 | } | ||
659 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
40 | PetscCall(SlepcBasisReference_Private(n,isl,&eps->ninil,&eps->ISL)); |
660 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
40 | if (n>0) eps->state = EPS_STATE_INITIAL; |
661 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
8 | PetscFunctionReturn(PETSC_SUCCESS); |
662 | } | ||
663 | |||
664 | /* | ||
665 | EPSSetDimensions_Default - Set reasonable values for ncv, mpd if not set | ||
666 | by the user. This is called at setup. | ||
667 | */ | ||
668 | 6961 | PetscErrorCode EPSSetDimensions_Default(EPS eps,PetscInt *nev,PetscInt *ncv,PetscInt *mpd) | |
669 | { | ||
670 | 6961 | PetscBool krylov; | |
671 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6961 | PetscInt nev2, n = eps->problem_type==EPS_BSE? eps->n/2: eps->n; |
672 | |||
673 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
6961 | PetscFunctionBegin; |
674 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
6961 | if (*nev==0 && eps->stop!=EPS_STOP_THRESHOLD) *nev = 1; |
675 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6961 | nev2 = eps->problem_type==EPS_BSE? (*nev+1)/2: *nev; |
676 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6961 | if (*ncv!=PETSC_DETERMINE) { /* ncv set */ |
677 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3711 | PetscCall(PetscObjectTypeCompareAny((PetscObject)eps,&krylov,EPSKRYLOVSCHUR,EPSARNOLDI,EPSLANCZOS,"")); |
678 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3711 | if (krylov) { |
679 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
3533 | PetscCheck(*ncv>=nev2+1 || (*ncv==nev2 && *ncv==n),PetscObjectComm((PetscObject)eps),PETSC_ERR_USER_INPUT,"The value of ncv must be at least nev+1"); |
680 | } else { | ||
681 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
178 | PetscCheck(*ncv>=nev2,PetscObjectComm((PetscObject)eps),PETSC_ERR_USER_INPUT,"The value of ncv must be at least nev"); |
682 | } | ||
683 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3250 | } else if (*mpd!=PETSC_DETERMINE) { /* mpd set */ |
684 | 60 | *ncv = PetscMin(n,nev2+(*mpd)); | |
685 | } else { /* neither set: defaults depend on nev being small or large */ | ||
686 |
3/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
3190 | if (nev2<500) *ncv = PetscMin(n,PetscMax(2*(nev2),nev2+15)); |
687 | else { | ||
688 | ✗ | *mpd = 500; | |
689 | ✗ | *ncv = PetscMin(n,nev2+(*mpd)); | |
690 | } | ||
691 | } | ||
692 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6961 | if (*mpd==PETSC_DETERMINE) *mpd = *ncv; |
693 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1308 | PetscFunctionReturn(PETSC_SUCCESS); |
694 | } | ||
695 | |||
696 | /*@ | ||
697 | EPSAllocateSolution - Allocate memory storage for common variables such | ||
698 | as eigenvalues and eigenvectors. | ||
699 | |||
700 | Collective | ||
701 | |||
702 | Input Parameters: | ||
703 | + eps - eigensolver context | ||
704 | - extra - number of additional positions, used for methods that require a | ||
705 | working basis slightly larger than ncv | ||
706 | |||
707 | Developer Notes: | ||
708 | This is SLEPC_EXTERN because it may be required by user plugin EPS | ||
709 | implementations. | ||
710 | |||
711 | Level: developer | ||
712 | |||
713 | .seealso: EPSSetUp() | ||
714 | @*/ | ||
715 | 9742 | PetscErrorCode EPSAllocateSolution(EPS eps,PetscInt extra) | |
716 | { | ||
717 | 9742 | PetscInt oldsize,requested; | |
718 | 9742 | PetscRandom rand; | |
719 | 9742 | Vec t; | |
720 | |||
721 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
9742 | PetscFunctionBegin; |
722 | 9742 | requested = eps->ncv + extra; | |
723 | |||
724 | /* oldsize is zero if this is the first time setup is called */ | ||
725 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
9742 | PetscCall(BVGetSizes(eps->V,NULL,NULL,&oldsize)); |
726 | |||
727 | /* allocate space for eigenvalues and friends */ | ||
728 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
9742 | if (requested != oldsize || !eps->eigr) { |
729 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7294 | PetscCall(PetscFree4(eps->eigr,eps->eigi,eps->errest,eps->perm)); |
730 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7294 | PetscCall(PetscMalloc4(requested,&eps->eigr,requested,&eps->eigi,requested,&eps->errest,requested,&eps->perm)); |
731 | } | ||
732 | |||
733 | /* workspace for the case of arbitrary selection */ | ||
734 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->arbitrary) { |
735 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
82 | if (eps->rr) PetscCall(PetscFree2(eps->rr,eps->ri)); |
736 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
82 | PetscCall(PetscMalloc2(requested,&eps->rr,requested,&eps->ri)); |
737 | } | ||
738 | |||
739 | /* allocate V */ | ||
740 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
9742 | if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V)); |
741 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (!oldsize) { |
742 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
7153 | if (!((PetscObject)eps->V)->type_name) PetscCall(BVSetType(eps->V,BVMAT)); |
743 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7153 | PetscCall(STMatCreateVecsEmpty(eps->st,&t,NULL)); |
744 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7153 | PetscCall(BVSetSizesFromVec(eps->V,t,requested)); |
745 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7153 | PetscCall(VecDestroy(&t)); |
746 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2589 | } else PetscCall(BVResize(eps->V,requested,PETSC_FALSE)); |
747 | |||
748 | /* allocate W */ | ||
749 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9742 | if (eps->twosided) { |
750 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
209 | PetscCall(BVGetRandomContext(eps->V,&rand)); /* make sure the random context is available when duplicating */ |
751 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
209 | PetscCall(BVDestroy(&eps->W)); |
752 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
209 | PetscCall(BVDuplicate(eps->V,&eps->W)); |
753 | } | ||
754 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1874 | PetscFunctionReturn(PETSC_SUCCESS); |
755 | } | ||
756 | |||
757 | /*@ | ||
758 | EPSReallocateSolution - Reallocate memory storage for common variables such | ||
759 | as the eigenvalues and the basis vectors. | ||
760 | |||
761 | Collective | ||
762 | |||
763 | Input Parameters: | ||
764 | + eps - eigensolver context | ||
765 | - newsize - new size | ||
766 | |||
767 | Developer Notes: | ||
768 | This is SLEPC_EXTERN because it may be required by user plugin EPS | ||
769 | implementations. | ||
770 | |||
771 | This is called during the iteration in case the threshold stopping test has | ||
772 | been selected. | ||
773 | |||
774 | Level: developer | ||
775 | |||
776 | .seealso: EPSAllocateSolution(), EPSSetThreshold() | ||
777 | @*/ | ||
778 | 73 | PetscErrorCode EPSReallocateSolution(EPS eps,PetscInt newsize) | |
779 | { | ||
780 | 73 | PetscInt oldsize,*nperm; | |
781 | 73 | PetscReal *nerrest; | |
782 | 73 | PetscScalar *neigr,*neigi; | |
783 | |||
784 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
73 | PetscFunctionBegin; |
785 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(BVGetSizes(eps->V,NULL,NULL,&oldsize)); |
786 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
73 | if (oldsize>=newsize) PetscFunctionReturn(PETSC_SUCCESS); |
787 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(PetscInfo(eps,"Reallocating basis vectors to %" PetscInt_FMT " columns\n",newsize)); |
788 | |||
789 | /* reallocate eigenvalues */ | ||
790 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(PetscMalloc4(newsize,&neigr,newsize,&neigi,newsize,&nerrest,newsize,&nperm)); |
791 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(PetscArraycpy(neigr,eps->eigr,oldsize)); |
792 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(PetscArraycpy(neigi,eps->eigi,oldsize)); |
793 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(PetscArraycpy(nerrest,eps->errest,oldsize)); |
794 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(PetscArraycpy(nperm,eps->perm,oldsize)); |
795 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(PetscFree4(eps->eigr,eps->eigi,eps->errest,eps->perm)); |
796 | 73 | eps->eigr = neigr; | |
797 | 73 | eps->eigi = neigi; | |
798 | 73 | eps->errest = nerrest; | |
799 | 73 | eps->perm = nperm; | |
800 | /* reallocate V,W */ | ||
801 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73 | PetscCall(BVResize(eps->V,newsize,PETSC_TRUE)); |
802 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
73 | if (eps->twosided) PetscCall(BVResize(eps->W,newsize,PETSC_TRUE)); |
803 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
15 | PetscFunctionReturn(PETSC_SUCCESS); |
804 | } | ||
805 |