GCC Code Coverage Report


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