GCC Code Coverage Report


Directory: ./
File: src/pep/interface/pepview.c
Date: 2026-02-22 03:58:10
Exec Total Coverage
Lines: 344 398 86.4%
Functions: 17 17 100.0%
Branches: 848 1859 45.6%

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 The PEP routines related to various viewers
12 */
13
14 #include <slepc/private/pepimpl.h> /*I "slepcpep.h" I*/
15 #include <slepc/private/bvimpl.h>
16 #include <petscdraw.h>
17
18 /*@
19 PEPView - Prints the `PEP` data structure.
20
21 Collective
22
23 Input Parameters:
24 + pep - the polynomial eigensolver context
25 - viewer - optional visualization context
26
27 Options Database Key:
28 . -pep_view - calls `PEPView()` at end of `PEPSolve()`
29
30 Notes:
31 The available visualization contexts include
32 + `PETSC_VIEWER_STDOUT_SELF` - standard output (default)
33 - `PETSC_VIEWER_STDOUT_WORLD` - synchronized standard output where only the
34 first process opens the file; all other processes send their data to the
35 first one to print
36
37 The user can open an alternative visualization context with `PetscViewerASCIIOpen()`
38 to output to a specified file.
39
40 Level: beginner
41
42 .seealso: [](ch:pep), `PEPCreate()`, `PEPViewFromOptions()`, `STView()`
43 @*/
44 12 PetscErrorCode PEPView(PEP pep,PetscViewer viewer)
45 {
46 12 const char *type=NULL;
47 12 char str[50];
48 12 PetscBool isascii,islinear,istrivial;
49 12 PetscInt i;
50 12 PetscViewer sviewer;
51 12 MPI_Comm child;
52
53
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
12 PetscFunctionBegin;
54
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.
12 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
55
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
12 if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)pep),&viewer));
56
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.
12 PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2);
57
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.
12 PetscCheckSameComm(pep,1,viewer,2);
58
59
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.
12 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
60
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
12 if (isascii) {
61
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.
12 PetscCall(PetscObjectPrintClassNamePrefixType((PetscObject)pep,viewer));
62
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.
12 PetscCall(PetscViewerASCIIPushTab(viewer));
63
5/8
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
12 PetscTryTypeMethod(pep,view,viewer);
64
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.
12 PetscCall(PetscViewerASCIIPopTab(viewer));
65
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
12 if (pep->problem_type) {
66
1/5
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
12 switch (pep->problem_type) {
67 12 case PEP_GENERAL: type = "general polynomial eigenvalue problem"; break;
68 case PEP_HERMITIAN: type = SLEPC_STRING_HERMITIAN " polynomial eigenvalue problem"; break;
69 case PEP_HYPERBOLIC: type = "hyperbolic polynomial eigenvalue problem"; break;
70 case PEP_GYROSCOPIC: type = "gyroscopic polynomial eigenvalue problem"; break;
71 }
72 } else type = "not yet set";
73
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," problem type: %s\n",type));
74
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," polynomial represented in %s basis\n",PEPBasisTypes[pep->basis]));
75
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
12 switch (pep->scale) {
76 case PEP_SCALE_NONE:
77 break;
78 4 case PEP_SCALE_SCALAR:
79
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PetscViewerASCIIPrintf(viewer," parameter scaling enabled, with scaling factor=%g\n",(double)pep->sfactor));
80 break;
81 case PEP_SCALE_DIAGONAL:
82 PetscCall(PetscViewerASCIIPrintf(viewer," diagonal balancing enabled, with its=%" PetscInt_FMT " and lambda=%g\n",pep->sits,(double)pep->slambda));
83 break;
84 case PEP_SCALE_BOTH:
85 PetscCall(PetscViewerASCIIPrintf(viewer," parameter scaling & diagonal balancing enabled, with scaling factor=%g, its=%" PetscInt_FMT " and lambda=%g\n",(double)pep->sfactor,pep->sits,(double)pep->slambda));
86 break;
87 }
88
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," selected portion of the spectrum: "));
89
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.
12 PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE));
90
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.
12 PetscCall(SlepcSNPrintfScalar(str,sizeof(str),pep->target,PETSC_FALSE));
91
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
12 if (!pep->which) PetscCall(PetscViewerASCIIPrintf(viewer,"not yet set\n"));
92
2/12
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
12 else switch (pep->which) {
93 case PEP_WHICH_USER:
94 PetscCall(PetscViewerASCIIPrintf(viewer,"user defined\n"));
95 break;
96 case PEP_TARGET_MAGNITUDE:
97 PetscCall(PetscViewerASCIIPrintf(viewer,"closest to target: %s (in magnitude)\n",str));
98 break;
99 case PEP_TARGET_REAL:
100 PetscCall(PetscViewerASCIIPrintf(viewer,"closest to target: %s (along the real axis)\n",str));
101 break;
102 case PEP_TARGET_IMAGINARY:
103 PetscCall(PetscViewerASCIIPrintf(viewer,"closest to target: %s (along the imaginary axis)\n",str));
104 break;
105 4 case PEP_LARGEST_MAGNITUDE:
106
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PetscViewerASCIIPrintf(viewer,"largest eigenvalues in magnitude\n"));
107 break;
108 case PEP_SMALLEST_MAGNITUDE:
109 PetscCall(PetscViewerASCIIPrintf(viewer,"smallest eigenvalues in magnitude\n"));
110 break;
111 8 case PEP_LARGEST_REAL:
112
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.
8 PetscCall(PetscViewerASCIIPrintf(viewer,"largest real parts\n"));
113 break;
114 case PEP_SMALLEST_REAL:
115 PetscCall(PetscViewerASCIIPrintf(viewer,"smallest real parts\n"));
116 break;
117 case PEP_LARGEST_IMAGINARY:
118 PetscCall(PetscViewerASCIIPrintf(viewer,"largest imaginary parts\n"));
119 break;
120 case PEP_SMALLEST_IMAGINARY:
121 PetscCall(PetscViewerASCIIPrintf(viewer,"smallest imaginary parts\n"));
122 break;
123 case PEP_ALL:
124 if (pep->inta || pep->intb) PetscCall(PetscViewerASCIIPrintf(viewer,"all eigenvalues in interval [%g,%g]\n",(double)pep->inta,(double)pep->intb));
125 else PetscCall(PetscViewerASCIIPrintf(viewer,"all eigenvalues in the region\n"));
126 break;
127 }
128
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.
12 PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_TRUE));
129
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," number of eigenvalues (nev): %" PetscInt_FMT "\n",pep->nev));
130
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," number of column vectors (ncv): %" PetscInt_FMT "\n",pep->ncv));
131
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," maximum dimension of projected problem (mpd): %" PetscInt_FMT "\n",pep->mpd));
132
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," maximum number of iterations: %" PetscInt_FMT "\n",pep->max_it));
133
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," tolerance: %g\n",(double)pep->tol));
134
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," convergence test: "));
135
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.
12 PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE));
136
2/5
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
12 switch (pep->conv) {
137 case PEP_CONV_ABS:
138 PetscCall(PetscViewerASCIIPrintf(viewer,"absolute\n"));break;
139 8 case PEP_CONV_REL:
140
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.
8 PetscCall(PetscViewerASCIIPrintf(viewer,"relative to the eigenvalue\n"));break;
141 4 case PEP_CONV_NORM:
142
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PetscViewerASCIIPrintf(viewer,"relative to the matrix norms\n"));
143
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (pep->nrma) {
144
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PetscViewerASCIIPrintf(viewer," computed matrix norms: %g",(double)pep->nrma[0]));
145
7/8
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
12 for (i=1;i<pep->nmat;i++) PetscCall(PetscViewerASCIIPrintf(viewer,", %g",(double)pep->nrma[i]));
146
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PetscViewerASCIIPrintf(viewer,"\n"));
147 }
148 break;
149 case PEP_CONV_USER:
150 PetscCall(PetscViewerASCIIPrintf(viewer,"user-defined\n"));break;
151 }
152
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.
12 PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_TRUE));
153
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.
12 PetscCall(PetscViewerASCIIPrintf(viewer," extraction type: %s\n",PEPExtractTypes[pep->extract]));
154
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
12 if (pep->refine) {
155 PetscCall(PetscViewerASCIIPrintf(viewer," iterative refinement: %s, with %s scheme\n",PEPRefineTypes[pep->refine],PEPRefineSchemes[pep->scheme]));
156 PetscCall(PetscViewerASCIIPrintf(viewer," refinement stopping criterion: tol=%g, its=%" PetscInt_FMT "\n",(double)pep->rtol,pep->rits));
157 if (pep->npart>1) PetscCall(PetscViewerASCIIPrintf(viewer," splitting communicator in %" PetscInt_FMT " partitions for refinement\n",pep->npart));
158 }
159
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
12 if (pep->nini) PetscCall(PetscViewerASCIIPrintf(viewer," dimension of user-provided initial space: %" PetscInt_FMT "\n",PetscAbs(pep->nini)));
160 } else PetscTryTypeMethod(pep,view,viewer);
161
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.
12 PetscCall(PetscViewerPushFormat(viewer,PETSC_VIEWER_ASCII_INFO));
162
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
12 if (!pep->V) PetscCall(PEPGetBV(pep,&pep->V));
163
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.
12 PetscCall(BVView(pep->V,viewer));
164
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
12 if (!pep->rg) PetscCall(PEPGetRG(pep,&pep->rg));
165
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.
12 PetscCall(RGIsTrivial(pep->rg,&istrivial));
166
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
12 if (!istrivial) PetscCall(RGView(pep->rg,viewer));
167
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.
12 PetscCall(PetscObjectTypeCompare((PetscObject)pep,PEPLINEAR,&islinear));
168
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
12 if (!islinear) {
169
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
12 if (!pep->ds) PetscCall(PEPGetDS(pep,&pep->ds));
170
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.
12 PetscCall(DSView(pep->ds,viewer));
171 }
172
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.
12 PetscCall(PetscViewerPopFormat(viewer));
173
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
12 if (!pep->st) PetscCall(PEPGetST(pep,&pep->st));
174
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.
12 PetscCall(STView(pep->st,viewer));
175
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
12 if (pep->refine!=PEP_REFINE_NONE) {
176 PetscCall(PetscViewerASCIIPushTab(viewer));
177 if (pep->npart>1) {
178 if (pep->refinesubc->color==0) {
179 PetscCall(PetscSubcommGetChild(pep->refinesubc,&child));
180 PetscCall(PetscViewerASCIIGetStdout(child,&sviewer));
181 PetscCall(KSPView(pep->refineksp,sviewer));
182 }
183 } else PetscCall(KSPView(pep->refineksp,viewer));
184 PetscCall(PetscViewerASCIIPopTab(viewer));
185 }
186
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.
3 PetscFunctionReturn(PETSC_SUCCESS);
187 }
188
189 /*@
190 PEPViewFromOptions - View (print) a `PEP` object based on values in the options database.
191
192 Collective
193
194 Input Parameters:
195 + pep - the polynomial eigensolver context
196 . obj - optional object that provides the options prefix used to query the options database
197 - name - command line option
198
199 Level: intermediate
200
201 .seealso: [](ch:pep), `PEPView()`, `PEPCreate()`, `PetscObjectViewFromOptions()`
202 @*/
203 3146 PetscErrorCode PEPViewFromOptions(PEP pep,PetscObject obj,const char name[])
204 {
205
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
3146 PetscFunctionBegin;
206
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.
3146 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
207
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.
3146 PetscCall(PetscObjectViewFromOptions((PetscObject)pep,obj,name));
208
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.
776 PetscFunctionReturn(PETSC_SUCCESS);
209 }
210
211 /*@
212 PEPConvergedReasonView - Displays the reason a `PEP` solve converged or diverged.
213
214 Collective
215
216 Input Parameters:
217 + pep - the polynomial eigensolver context
218 - viewer - the viewer to display the reason
219
220 Options Database Key:
221 . -pep_converged_reason - print reason for convergence/divergence, and number of iterations
222
223 Notes:
224 Use `PEPConvergedReasonViewFromOptions()` to display the reason based on values
225 in the options database.
226
227 To change the format of the output call `PetscViewerPushFormat()` before this
228 call. Use `PETSC_VIEWER_DEFAULT` for the default, or `PETSC_VIEWER_FAILED` to only
229 display a reason if it fails. The latter can be set in the command line with
230 `-pep_converged_reason ::failed`.
231
232 Level: intermediate
233
234 .seealso: [](ch:pep), `PEPSetConvergenceTest()`, `PEPSetTolerances()`, `PEPGetIterationNumber()`, `PEPConvergedReasonViewFromOptions()`
235 @*/
236 40 PetscErrorCode PEPConvergedReasonView(PEP pep,PetscViewer viewer)
237 {
238 40 PetscBool isAscii;
239 40 PetscViewerFormat format;
240
241
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
40 PetscFunctionBegin;
242
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
40 if (!viewer) viewer = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)pep));
243
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.
40 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isAscii));
244
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
40 if (isAscii) {
245
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.
40 PetscCall(PetscViewerGetFormat(viewer,&format));
246
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.
40 PetscCall(PetscViewerASCIIAddTab(viewer,((PetscObject)pep)->tablevel));
247
10/14
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 8 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
48 if (pep->reason > 0 && format != PETSC_VIEWER_FAILED) PetscCall(PetscViewerASCIIPrintf(viewer,"%s Polynomial eigensolve converged (%" PetscInt_FMT " eigenpair%s) due to %s; iterations %" PetscInt_FMT "\n",((PetscObject)pep)->prefix?((PetscObject)pep)->prefix:"",pep->nconv,(pep->nconv>1)?"s":"",PEPConvergedReasons[pep->reason],pep->its));
248 else if (pep->reason <= 0) PetscCall(PetscViewerASCIIPrintf(viewer,"%s Polynomial eigensolve did not converge due to %s; iterations %" PetscInt_FMT "\n",((PetscObject)pep)->prefix?((PetscObject)pep)->prefix:"",PEPConvergedReasons[pep->reason],pep->its));
249
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.
40 PetscCall(PetscViewerASCIISubtractTab(viewer,((PetscObject)pep)->tablevel));
250 }
251
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
10 PetscFunctionReturn(PETSC_SUCCESS);
252 }
253
254 /*@
255 PEPConvergedReasonViewFromOptions - Processes command line options to determine if/how
256 the `PEP` converged reason is to be viewed.
257
258 Collective
259
260 Input Parameter:
261 . pep - the polynomial eigensolver context
262
263 Level: intermediate
264
265 .seealso: [](ch:pep), `PEPConvergedReasonView()`
266 @*/
267 1573 PetscErrorCode PEPConvergedReasonViewFromOptions(PEP pep)
268 {
269 1573 PetscViewer viewer;
270 1573 PetscBool flg;
271 1573 static PetscBool incall = PETSC_FALSE;
272 1573 PetscViewerFormat format;
273
274
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1573 PetscFunctionBegin;
275
2/14
✓ Branch 0 taken 6 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.
1573 if (incall) PetscFunctionReturn(PETSC_SUCCESS);
276 1573 incall = PETSC_TRUE;
277
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.
1573 PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)pep),((PetscObject)pep)->options,((PetscObject)pep)->prefix,"-pep_converged_reason",&viewer,&format,&flg));
278
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 8 times.
1573 if (flg) {
279
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.
8 PetscCall(PetscViewerPushFormat(viewer,format));
280
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.
8 PetscCall(PEPConvergedReasonView(pep,viewer));
281
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.
8 PetscCall(PetscViewerPopFormat(viewer));
282
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.
8 PetscCall(PetscViewerDestroy(&viewer));
283 }
284 1573 incall = PETSC_FALSE;
285
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.
1573 PetscFunctionReturn(PETSC_SUCCESS);
286 }
287
288 1299 static PetscErrorCode PEPErrorView_ASCII(PEP pep,PEPErrorType etype,PetscViewer viewer)
289 {
290 1299 PetscReal error;
291 1299 PetscInt i,j,k,nvals;
292
293
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1299 PetscFunctionBegin;
294
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
1299 nvals = (pep->which==PEP_ALL)? pep->nconv: pep->nev;
295
3/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
1299 if (pep->which!=PEP_ALL && pep->nconv<pep->nev) {
296 PetscCall(PetscViewerASCIIPrintf(viewer," Problem: less than %" PetscInt_FMT " eigenvalues converged\n\n",pep->nev));
297 PetscFunctionReturn(PETSC_SUCCESS);
298 }
299
3/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
1299 if (pep->which==PEP_ALL && !nvals) {
300 PetscCall(PetscViewerASCIIPrintf(viewer," No eigenvalues have been found\n\n"));
301 PetscFunctionReturn(PETSC_SUCCESS);
302 }
303
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
8378 for (i=0;i<nvals;i++) {
304
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.
7079 PetscCall(PEPComputeError(pep,i,etype,&error));
305
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
7079 if (error>=5.0*pep->tol) {
306 PetscCall(PetscViewerASCIIPrintf(viewer," Problem: some of the first %" PetscInt_FMT " relative errors are higher than the tolerance\n\n",nvals));
307
0/12
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ 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.
1741 PetscFunctionReturn(PETSC_SUCCESS);
308 }
309 }
310
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
1299 if (pep->which==PEP_ALL) PetscCall(PetscViewerASCIIPrintf(viewer," Found %" PetscInt_FMT " eigenvalues, all of them computed up to the required tolerance:",nvals));
311
3/6
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
1189 else PetscCall(PetscViewerASCIIPrintf(viewer," All requested eigenvalues computed up to the required tolerance:"));
312
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2859 for (i=0;i<=(nvals-1)/8;i++) {
313
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.
1560 PetscCall(PetscViewerASCIIPrintf(viewer,"\n "));
314
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
8639 for (j=0;j<PetscMin(8,nvals-8*i);j++) {
315 7079 k = pep->perm[8*i+j];
316
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.
7079 PetscCall(SlepcPrintEigenvalueASCII(viewer,pep->eigr[k],pep->eigi[k]));
317
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
7079 if (8*i+j+1<nvals) PetscCall(PetscViewerASCIIPrintf(viewer,", "));
318 }
319 }
320
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.
1299 PetscCall(PetscViewerASCIIPrintf(viewer,"\n\n"));
321
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.
320 PetscFunctionReturn(PETSC_SUCCESS);
322 }
323
324 28 static PetscErrorCode PEPErrorView_DETAIL(PEP pep,PEPErrorType etype,PetscViewer viewer)
325 {
326 28 PetscReal error,re,im;
327 28 PetscScalar kr,ki;
328 28 PetscInt i;
329 28 char ex[30],sep[]=" ---------------------- --------------------\n";
330
331
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
28 PetscFunctionBegin;
332
8/14
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
28 if (!pep->nconv) PetscFunctionReturn(PETSC_SUCCESS);
333
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
20 switch (etype) {
334 case PEP_ERROR_ABSOLUTE:
335 PetscCall(PetscSNPrintf(ex,sizeof(ex)," ||P(k)x||"));
336 break;
337 12 case PEP_ERROR_RELATIVE:
338
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.
12 PetscCall(PetscSNPrintf(ex,sizeof(ex),"||P(k)x||/||kx||"));
339 break;
340 8 case PEP_ERROR_BACKWARD:
341
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.
8 PetscCall(PetscSNPrintf(ex,sizeof(ex)," eta(x,k)"));
342 break;
343 }
344
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.
20 PetscCall(PetscViewerASCIIPrintf(viewer,"%s k %s\n%s",sep,ex,sep));
345
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
160 for (i=0;i<pep->nconv;i++) {
346
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.
140 PetscCall(PEPGetEigenpair(pep,i,&kr,&ki,NULL,NULL));
347
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.
140 PetscCall(PEPComputeError(pep,i,etype,&error));
348 #if defined(PETSC_USE_COMPLEX)
349 60 re = PetscRealPart(kr);
350 60 im = PetscImaginaryPart(kr);
351 #else
352 80 re = kr;
353 80 im = ki;
354 #endif
355
6/8
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 3 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
140 if (im!=0.0) PetscCall(PetscViewerASCIIPrintf(viewer," % 9f%+9fi %12g\n",(double)re,(double)im,(double)error));
356
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.
140 else PetscCall(PetscViewerASCIIPrintf(viewer," % 12f %12g\n",(double)re,(double)error));
357 }
358
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.
20 PetscCall(PetscViewerASCIIPrintf(viewer,"%s",sep));
359
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.
5 PetscFunctionReturn(PETSC_SUCCESS);
360 }
361
362 8 static PetscErrorCode PEPErrorView_MATLAB(PEP pep,PEPErrorType etype,PetscViewer viewer)
363 {
364 8 PetscReal error;
365 8 PetscInt i;
366 8 const char *name;
367
368
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
369
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.
8 PetscCall(PetscObjectGetName((PetscObject)pep,&name));
370
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.
8 PetscCall(PetscViewerASCIIPrintf(viewer,"Error_%s = [\n",name));
371
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
104 for (i=0;i<pep->nconv;i++) {
372
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.
96 PetscCall(PEPComputeError(pep,i,etype,&error));
373
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.
96 PetscCall(PetscViewerASCIIPrintf(viewer,"%18.16e\n",(double)error));
374 }
375
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.
8 PetscCall(PetscViewerASCIIPrintf(viewer,"];\n"));
376
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
2 PetscFunctionReturn(PETSC_SUCCESS);
377 }
378
379 /*@
380 PEPErrorView - Displays the errors associated with the computed solution
381 (as well as the eigenvalues).
382
383 Collective
384
385 Input Parameters:
386 + pep - the polynomial eigensolver context
387 . etype - error type
388 - viewer - optional visualization context
389
390 Options Database Keys:
391 + -pep_error_absolute - print absolute errors of each eigenpair
392 . -pep_error_relative - print relative errors of each eigenpair
393 - -pep_error_backward - print backward errors of each eigenpair
394
395 Notes:
396 By default, this function checks the error of all eigenpairs and prints
397 the eigenvalues if all of them are below the requested tolerance.
398 If the viewer has format `PETSC_VIEWER_ASCII_INFO_DETAIL` then a table with
399 eigenvalues and corresponding errors is printed.
400
401 All the command-line options listed above admit an optional argument
402 specifying the viewer type and options. For instance, use
403 `-pep_error_relative :myerr.m:ascii_matlab` to save the errors in a file
404 that can be executed in Matlab.
405
406 Level: intermediate
407
408 .seealso: [](ch:pep), `PEPSolve()`, `PEPValuesView()`, `PEPVectorsView()`
409 @*/
410 1335 PetscErrorCode PEPErrorView(PEP pep,PEPErrorType etype,PetscViewer viewer)
411 {
412 1335 PetscBool isascii;
413 1335 PetscViewerFormat format;
414
415
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1335 PetscFunctionBegin;
416
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.
1335 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
417
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
1335 if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)pep),&viewer));
418
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.
1335 PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,3);
419
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.
1335 PetscCheckSameComm(pep,1,viewer,3);
420
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1335 PEPCheckSolved(pep,1);
421
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.
1335 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
422
2/14
✓ Branch 0 taken 6 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.
1335 if (!isascii) PetscFunctionReturn(PETSC_SUCCESS);
423
424
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.
1335 PetscCall(PetscViewerGetFormat(viewer,&format));
425
3/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
1335 switch (format) {
426 1299 case PETSC_VIEWER_DEFAULT:
427 case PETSC_VIEWER_ASCII_INFO:
428
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.
1299 PetscCall(PEPErrorView_ASCII(pep,etype,viewer));
429 break;
430 28 case PETSC_VIEWER_ASCII_INFO_DETAIL:
431
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.
28 PetscCall(PEPErrorView_DETAIL(pep,etype,viewer));
432 break;
433 8 case PETSC_VIEWER_ASCII_MATLAB:
434
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.
8 PetscCall(PEPErrorView_MATLAB(pep,etype,viewer));
435 break;
436 default:
437 PetscCall(PetscInfo(pep,"Unsupported viewer format %s\n",PetscViewerFormats[format]));
438 }
439
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.
329 PetscFunctionReturn(PETSC_SUCCESS);
440 }
441
442 /*@
443 PEPErrorViewFromOptions - Processes command line options to determine if/how
444 the errors of the computed solution are to be viewed.
445
446 Collective
447
448 Input Parameter:
449 . pep - the polynomial eigensolver context
450
451 Level: developer
452
453 .seealso: [](ch:pep), `PEPErrorView()`
454 @*/
455 1573 PetscErrorCode PEPErrorViewFromOptions(PEP pep)
456 {
457 1573 PetscViewer viewer;
458 1573 PetscBool flg;
459 1573 static PetscBool incall = PETSC_FALSE;
460 1573 PetscViewerFormat format;
461
462
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1573 PetscFunctionBegin;
463
2/14
✓ Branch 0 taken 6 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.
1573 if (incall) PetscFunctionReturn(PETSC_SUCCESS);
464 1573 incall = PETSC_TRUE;
465
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.
1573 PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)pep),((PetscObject)pep)->options,((PetscObject)pep)->prefix,"-pep_error_absolute",&viewer,&format,&flg));
466
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 8 times.
1573 if (flg) {
467
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.
8 PetscCall(PetscViewerPushFormat(viewer,format));
468
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.
8 PetscCall(PEPErrorView(pep,PEP_ERROR_ABSOLUTE,viewer));
469
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.
8 PetscCall(PetscViewerPopFormat(viewer));
470
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.
8 PetscCall(PetscViewerDestroy(&viewer));
471 }
472
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.
1573 PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)pep),((PetscObject)pep)->options,((PetscObject)pep)->prefix,"-pep_error_relative",&viewer,&format,&flg));
473
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 8 times.
1573 if (flg) {
474
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PetscViewerPushFormat(viewer,format));
475
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PEPErrorView(pep,PEP_ERROR_RELATIVE,viewer));
476
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PetscViewerPopFormat(viewer));
477
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(PetscViewerDestroy(&viewer));
478 }
479
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.
1573 PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)pep),((PetscObject)pep)->options,((PetscObject)pep)->prefix,"-pep_error_backward",&viewer,&format,&flg));
480
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 8 times.
1573 if (flg) {
481
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.
8 PetscCall(PetscViewerPushFormat(viewer,format));
482
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.
8 PetscCall(PEPErrorView(pep,PEP_ERROR_BACKWARD,viewer));
483
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.
8 PetscCall(PetscViewerPopFormat(viewer));
484
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.
8 PetscCall(PetscViewerDestroy(&viewer));
485 }
486 1573 incall = PETSC_FALSE;
487
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.
1573 PetscFunctionReturn(PETSC_SUCCESS);
488 }
489
490 14 static PetscErrorCode PEPValuesView_DRAW(PEP pep,PetscViewer viewer)
491 {
492 14 PetscDraw draw;
493 14 PetscDrawSP drawsp;
494 14 PetscReal re,im;
495 14 PetscInt i,k;
496
497
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
14 PetscFunctionBegin;
498
2/14
✓ Branch 0 taken 5 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.
14 if (!pep->nconv) PetscFunctionReturn(PETSC_SUCCESS);
499
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
14 PetscCall(PetscViewerDrawGetDraw(viewer,0,&draw));
500
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
14 PetscCall(PetscDrawSetTitle(draw,"Computed Eigenvalues"));
501
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
14 PetscCall(PetscDrawSPCreate(draw,1,&drawsp));
502
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 7 times.
123 for (i=0;i<pep->nconv;i++) {
503 109 k = pep->perm[i];
504 #if defined(PETSC_USE_COMPLEX)
505 45 re = PetscRealPart(pep->eigr[k]);
506 45 im = PetscImaginaryPart(pep->eigr[k]);
507 #else
508 64 re = pep->eigr[k];
509 64 im = pep->eigi[k];
510 #endif
511
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
109 PetscCall(PetscDrawSPAddPoint(drawsp,&re,&im));
512 }
513
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
14 PetscCall(PetscDrawSPDraw(drawsp,PETSC_TRUE));
514
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
14 PetscCall(PetscDrawSPSave(drawsp));
515
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
14 PetscCall(PetscDrawSPDestroy(&drawsp));
516
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.
4 PetscFunctionReturn(PETSC_SUCCESS);
517 }
518
519 8 static PetscErrorCode PEPValuesView_BINARY(PEP pep,PetscViewer viewer)
520 {
521 #if defined(PETSC_HAVE_COMPLEX)
522 8 PetscInt i,k;
523 8 PetscComplex *ev;
524 #endif
525
526
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
527 #if defined(PETSC_HAVE_COMPLEX)
528
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.
8 PetscCall(PetscMalloc1(pep->nconv,&ev));
529
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
104 for (i=0;i<pep->nconv;i++) {
530 96 k = pep->perm[i];
531 #if defined(PETSC_USE_COMPLEX)
532 48 ev[i] = pep->eigr[k];
533 #else
534 48 ev[i] = PetscCMPLX(pep->eigr[k],pep->eigi[k]);
535 #endif
536 }
537
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.
8 PetscCall(PetscViewerBinaryWrite(viewer,ev,pep->nconv,PETSC_COMPLEX));
538
5/8
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
8 PetscCall(PetscFree(ev));
539 #endif
540
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
2 PetscFunctionReturn(PETSC_SUCCESS);
541 }
542
543 #if defined(PETSC_HAVE_HDF5)
544 static PetscErrorCode PEPValuesView_HDF5(PEP pep,PetscViewer viewer)
545 {
546 PetscInt i,k,n,N;
547 PetscMPIInt rank;
548 Vec v;
549 char vname[30];
550 const char *ename;
551
552 PetscFunctionBegin;
553 PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)pep),&rank));
554 N = pep->nconv;
555 n = rank? 0: N;
556 /* create a vector containing the eigenvalues */
557 PetscCall(VecCreateMPI(PetscObjectComm((PetscObject)pep),n,N,&v));
558 PetscCall(PetscObjectGetName((PetscObject)pep,&ename));
559 PetscCall(PetscSNPrintf(vname,sizeof(vname),"eigr_%s",ename));
560 PetscCall(PetscObjectSetName((PetscObject)v,vname));
561 if (!rank) {
562 for (i=0;i<pep->nconv;i++) {
563 k = pep->perm[i];
564 PetscCall(VecSetValue(v,i,pep->eigr[k],INSERT_VALUES));
565 }
566 }
567 PetscCall(VecAssemblyBegin(v));
568 PetscCall(VecAssemblyEnd(v));
569 PetscCall(VecView(v,viewer));
570 #if !defined(PETSC_USE_COMPLEX)
571 /* in real scalars write the imaginary part as a separate vector */
572 PetscCall(PetscSNPrintf(vname,sizeof(vname),"eigi_%s",ename));
573 PetscCall(PetscObjectSetName((PetscObject)v,vname));
574 if (!rank) {
575 for (i=0;i<pep->nconv;i++) {
576 k = pep->perm[i];
577 PetscCall(VecSetValue(v,i,pep->eigi[k],INSERT_VALUES));
578 }
579 }
580 PetscCall(VecAssemblyBegin(v));
581 PetscCall(VecAssemblyEnd(v));
582 PetscCall(VecView(v,viewer));
583 #endif
584 PetscCall(VecDestroy(&v));
585 PetscFunctionReturn(PETSC_SUCCESS);
586 }
587 #endif
588
589 8 static PetscErrorCode PEPValuesView_ASCII(PEP pep,PetscViewer viewer)
590 {
591 8 PetscInt i,k;
592
593
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
594
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.
8 PetscCall(PetscViewerASCIIPrintf(viewer,"Eigenvalues = \n"));
595
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
104 for (i=0;i<pep->nconv;i++) {
596 96 k = pep->perm[i];
597
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.
96 PetscCall(PetscViewerASCIIPrintf(viewer," "));
598
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.
96 PetscCall(SlepcPrintEigenvalueASCII(viewer,pep->eigr[k],pep->eigi[k]));
599
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.
96 PetscCall(PetscViewerASCIIPrintf(viewer,"\n"));
600 }
601
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.
8 PetscCall(PetscViewerASCIIPrintf(viewer,"\n"));
602
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
2 PetscFunctionReturn(PETSC_SUCCESS);
603 }
604
605 8 static PetscErrorCode PEPValuesView_MATLAB(PEP pep,PetscViewer viewer)
606 {
607 8 PetscInt i,k;
608 8 PetscReal re,im;
609 8 const char *name;
610
611
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
612
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.
8 PetscCall(PetscObjectGetName((PetscObject)pep,&name));
613
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.
8 PetscCall(PetscViewerASCIIPrintf(viewer,"Lambda_%s = [\n",name));
614
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
24 for (i=0;i<pep->nconv;i++) {
615 16 k = pep->perm[i];
616 #if defined(PETSC_USE_COMPLEX)
617 8 re = PetscRealPart(pep->eigr[k]);
618 8 im = PetscImaginaryPart(pep->eigr[k]);
619 #else
620 8 re = pep->eigr[k];
621 8 im = pep->eigi[k];
622 #endif
623
6/8
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 3 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
16 if (im!=0.0) PetscCall(PetscViewerASCIIPrintf(viewer,"%18.16e%+18.16ei\n",(double)re,(double)im));
624
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
16 else PetscCall(PetscViewerASCIIPrintf(viewer,"%18.16e\n",(double)re));
625 }
626
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.
8 PetscCall(PetscViewerASCIIPrintf(viewer,"];\n"));
627
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
2 PetscFunctionReturn(PETSC_SUCCESS);
628 }
629
630 /*@
631 PEPValuesView - Displays the computed eigenvalues in a viewer.
632
633 Collective
634
635 Input Parameters:
636 + pep - the polynomial eigensolver context
637 - viewer - the viewer
638
639 Options Database Key:
640 . -pep_view_values - print computed eigenvalues
641
642 Note:
643 The command-line option listed above admits an optional argument
644 specifying the viewer type and options. For instance, use
645 `-pep_view_values :evals.m:ascii_matlab` to save the values in a file
646 that can be executed in Matlab.
647
648 Level: intermediate
649
650 .seealso: [](ch:pep), `PEPSolve()`, `PEPVectorsView()`, `PEPErrorView()`
651 @*/
652 38 PetscErrorCode PEPValuesView(PEP pep,PetscViewer viewer)
653 {
654 38 PetscBool isascii,isdraw,isbinary;
655 38 PetscViewerFormat format;
656 #if defined(PETSC_HAVE_HDF5)
657 PetscBool ishdf5;
658 #endif
659
660
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
38 PetscFunctionBegin;
661
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.
38 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
662
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
38 if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)pep),&viewer));
663
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.
38 PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2);
664
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.
38 PetscCheckSameComm(pep,1,viewer,2);
665
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
38 PEPCheckSolved(pep,1);
666
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.
38 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw));
667
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.
38 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERBINARY,&isbinary));
668 #if defined(PETSC_HAVE_HDF5)
669 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERHDF5,&ishdf5));
670 #endif
671
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.
38 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
672
6/8
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
38 if (isdraw) PetscCall(PEPValuesView_DRAW(pep,viewer));
673
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
24 else if (isbinary) PetscCall(PEPValuesView_BINARY(pep,viewer));
674 #if defined(PETSC_HAVE_HDF5)
675 else if (ishdf5) PetscCall(PEPValuesView_HDF5(pep,viewer));
676 #endif
677
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
16 else if (isascii) {
678
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.
16 PetscCall(PetscViewerGetFormat(viewer,&format));
679
2/3
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 switch (format) {
680 8 case PETSC_VIEWER_DEFAULT:
681 case PETSC_VIEWER_ASCII_INFO:
682 case PETSC_VIEWER_ASCII_INFO_DETAIL:
683
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.
8 PetscCall(PEPValuesView_ASCII(pep,viewer));
684 break;
685 8 case PETSC_VIEWER_ASCII_MATLAB:
686
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.
8 PetscCall(PEPValuesView_MATLAB(pep,viewer));
687 break;
688 default:
689 PetscCall(PetscInfo(pep,"Unsupported viewer format %s\n",PetscViewerFormats[format]));
690 }
691 }
692
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
10 PetscFunctionReturn(PETSC_SUCCESS);
693 }
694
695 /*@
696 PEPValuesViewFromOptions - Processes command line options to determine if/how
697 the computed eigenvalues are to be viewed.
698
699 Collective
700
701 Input Parameter:
702 . pep - the polynomial eigensolver context
703
704 Level: developer
705
706 .seealso: [](ch:pep), `PEPValuesView()`
707 @*/
708 1573 PetscErrorCode PEPValuesViewFromOptions(PEP pep)
709 {
710 1573 PetscViewer viewer;
711 1573 PetscBool flg;
712 1573 static PetscBool incall = PETSC_FALSE;
713 1573 PetscViewerFormat format;
714
715
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1573 PetscFunctionBegin;
716
2/14
✓ Branch 0 taken 6 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.
1573 if (incall) PetscFunctionReturn(PETSC_SUCCESS);
717 1573 incall = PETSC_TRUE;
718
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.
1573 PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)pep),((PetscObject)pep)->options,((PetscObject)pep)->prefix,"-pep_view_values",&viewer,&format,&flg));
719
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
1573 if (flg) {
720
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.
38 PetscCall(PetscViewerPushFormat(viewer,format));
721
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.
38 PetscCall(PEPValuesView(pep,viewer));
722
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.
38 PetscCall(PetscViewerPopFormat(viewer));
723
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.
38 PetscCall(PetscViewerDestroy(&viewer));
724 }
725 1573 incall = PETSC_FALSE;
726
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.
1573 PetscFunctionReturn(PETSC_SUCCESS);
727 }
728
729 /*@
730 PEPVectorsView - Outputs computed eigenvectors to a viewer.
731
732 Collective
733
734 Input Parameters:
735 + pep - the polynomial eigensolver context
736 - viewer - the viewer
737
738 Options Database Key:
739 . -pep_view_vectors - output eigenvectors
740
741 Notes:
742 If PETSc was configured with real scalars, complex conjugate eigenvectors
743 will be viewed as two separate real vectors, one containing the real part
744 and another one containing the imaginary part.
745
746 The command-line option listed above admits an optional argument
747 specifying the viewer type and options. For instance, use
748 `-pep_view_vectors binary:evecs.bin` to save the vectors in a binary file.
749
750 Level: intermediate
751
752 .seealso: [](ch:pep), `PEPSolve()`, `PEPValuesView()`, `PEPErrorView()`
753 @*/
754 8 PetscErrorCode PEPVectorsView(PEP pep,PetscViewer viewer)
755 {
756 8 PetscInt i,k;
757 8 Vec xr,xi=NULL;
758
759
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
760
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.
8 PetscValidHeaderSpecific(pep,PEP_CLASSID,1);
761
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
8 if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)pep),&viewer));
762
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.
8 PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2);
763
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.
8 PetscCheckSameComm(pep,1,viewer,2);
764
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
8 PEPCheckSolved(pep,1);
765
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 if (pep->nconv) {
766
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.
8 PetscCall(PEPComputeVectors(pep));
767
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.
8 PetscCall(BVCreateVec(pep->V,&xr));
768 #if !defined(PETSC_USE_COMPLEX)
769
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(BVCreateVec(pep->V,&xi));
770 #endif
771
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
20 for (i=0;i<pep->nconv;i++) {
772 12 k = pep->perm[i];
773
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.
12 PetscCall(BV_GetEigenvector(pep->V,k,pep->eigi[k],xr,xi));
774
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.
12 PetscCall(SlepcViewEigenvector(viewer,xr,xi,"X",i,(PetscObject)pep));
775 }
776
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.
8 PetscCall(VecDestroy(&xr));
777 #if !defined(PETSC_USE_COMPLEX)
778
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
4 PetscCall(VecDestroy(&xi));
779 #endif
780 }
781
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
2 PetscFunctionReturn(PETSC_SUCCESS);
782 }
783
784 /*@
785 PEPVectorsViewFromOptions - Processes command line options to determine if/how
786 the computed eigenvectors are to be viewed.
787
788 Collective
789
790 Input Parameter:
791 . pep - the polynomial eigensolver context
792
793 Level: developer
794
795 .seealso: [](ch:pep), `PEPVectorsView()`
796 @*/
797 1573 PetscErrorCode PEPVectorsViewFromOptions(PEP pep)
798 {
799 1573 PetscViewer viewer;
800 1573 PetscBool flg = PETSC_FALSE;
801 1573 static PetscBool incall = PETSC_FALSE;
802 1573 PetscViewerFormat format;
803
804
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1573 PetscFunctionBegin;
805
2/14
✓ Branch 0 taken 6 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.
1573 if (incall) PetscFunctionReturn(PETSC_SUCCESS);
806 1573 incall = PETSC_TRUE;
807
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.
1573 PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)pep),((PetscObject)pep)->options,((PetscObject)pep)->prefix,"-pep_view_vectors",&viewer,&format,&flg));
808
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 8 times.
1573 if (flg) {
809
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.
8 PetscCall(PetscViewerPushFormat(viewer,format));
810
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.
8 PetscCall(PEPVectorsView(pep,viewer));
811
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.
8 PetscCall(PetscViewerPopFormat(viewer));
812
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.
8 PetscCall(PetscViewerDestroy(&viewer));
813 }
814 1573 incall = PETSC_FALSE;
815
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.
1573 PetscFunctionReturn(PETSC_SUCCESS);
816 }
817