| 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 | 15 | PetscErrorCode PEPView(PEP pep,PetscViewer viewer) | |
| 45 | { | ||
| 46 | 15 | const char *type=NULL; | |
| 47 | 15 | char str[50]; | |
| 48 | 15 | PetscBool isascii,islinear,istrivial; | |
| 49 | 15 | PetscInt i; | |
| 50 | 15 | PetscViewer sviewer; | |
| 51 | 15 | MPI_Comm child; | |
| 52 | |||
| 53 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
15 | 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.
|
15 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
| 55 |
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)); |
| 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.
|
15 | 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.
|
15 | PetscCheckSameComm(pep,1,viewer,2); |
| 58 | |||
| 59 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 60 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
15 | if (isascii) { |
| 61 |
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)); |
| 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(PetscViewerASCIIPushTab(viewer)); |
| 63 |
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); |
| 64 |
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)); |
| 65 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
15 | if (pep->problem_type) { |
| 66 |
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) { |
| 67 | 15 | 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 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)); |
| 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," polynomial represented in %s basis\n",PEPBasisTypes[pep->basis])); |
| 75 |
2/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
15 | switch (pep->scale) { |
| 76 | case PEP_SCALE_NONE: | ||
| 77 | break; | ||
| 78 | 5 | case PEP_SCALE_SCALAR: | |
| 79 |
4/6✓ Branch 0 taken 1 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)); |
| 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 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: ")); |
| 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(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE)); |
| 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(SlepcSNPrintfScalar(str,sizeof(str),pep->target,PETSC_FALSE)); |
| 91 |
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")); |
| 92 |
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) { |
| 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 | 5 | case PEP_LARGEST_MAGNITUDE: | |
| 106 |
4/6✓ Branch 0 taken 1 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")); |
| 107 | break; | ||
| 108 | ✗ | case PEP_SMALLEST_MAGNITUDE: | |
| 109 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"smallest eigenvalues in magnitude\n")); | |
| 110 | break; | ||
| 111 | 10 | case PEP_LARGEST_REAL: | |
| 112 |
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")); |
| 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 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)); |
| 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(PetscViewerASCIIPrintf(viewer," number of eigenvalues (nev): %" PetscInt_FMT "\n",pep->nev)); |
| 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 column vectors (ncv): %" PetscInt_FMT "\n",pep->ncv)); |
| 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," maximum dimension of projected problem (mpd): %" PetscInt_FMT "\n",pep->mpd)); |
| 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 number of iterations: %" PetscInt_FMT "\n",pep->max_it)); |
| 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," tolerance: %g\n",(double)pep->tol)); |
| 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," convergence test: ")); |
| 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(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE)); |
| 136 |
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) { |
| 137 | ✗ | case PEP_CONV_ABS: | |
| 138 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"absolute\n"));break; | |
| 139 | 10 | case PEP_CONV_REL: | |
| 140 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerASCIIPrintf(viewer,"relative to the eigenvalue\n"));break; |
| 141 | 5 | case PEP_CONV_NORM: | |
| 142 |
4/6✓ Branch 0 taken 1 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")); |
| 143 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
5 | if (pep->nrma) { |
| 144 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5 | PetscCall(PetscViewerASCIIPrintf(viewer," computed matrix norms: %g",(double)pep->nrma[0])); |
| 145 |
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])); |
| 146 |
4/6✓ Branch 0 taken 1 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")); |
| 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 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)); |
| 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(PetscViewerASCIIPrintf(viewer," extraction type: %s\n",PEPExtractTypes[pep->extract])); |
| 154 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
15 | 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 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))); |
| 160 | ✗ | } else PetscTryTypeMethod(pep,view,viewer); | |
| 161 |
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)); |
| 162 |
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)); |
| 163 |
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)); |
| 164 |
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)); |
| 165 |
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)); |
| 166 |
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)); |
| 167 |
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)); |
| 168 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
15 | if (!islinear) { |
| 169 |
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)); |
| 170 |
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)); |
| 171 | } | ||
| 172 |
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)); |
| 173 |
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)); |
| 174 |
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)); |
| 175 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
15 | 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 | 3912 | PetscErrorCode PEPViewFromOptions(PEP pep,PetscObject obj,const char name[]) | |
| 204 | { | ||
| 205 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3912 | 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.
|
3912 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
| 207 |
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)); |
| 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.
|
764 | 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 | 50 | PetscErrorCode PEPConvergedReasonView(PEP pep,PetscViewer viewer) | |
| 237 | { | ||
| 238 | 50 | PetscBool isAscii; | |
| 239 | 50 | PetscViewerFormat format; | |
| 240 | |||
| 241 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50 | PetscFunctionBegin; |
| 242 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
50 | if (!viewer) viewer = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)pep)); |
| 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(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isAscii)); |
| 244 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
50 | if (isAscii) { |
| 245 |
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)); |
| 246 |
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)); |
| 247 |
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)); |
| 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 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)); |
| 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 | 1956 | PetscErrorCode PEPConvergedReasonViewFromOptions(PEP pep) | |
| 268 | { | ||
| 269 | 1956 | PetscViewer viewer; | |
| 270 | 1956 | PetscBool flg; | |
| 271 | 1956 | static PetscBool incall = PETSC_FALSE; | |
| 272 | 1956 | PetscViewerFormat format; | |
| 273 | |||
| 274 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1956 | PetscFunctionBegin; |
| 275 |
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); |
| 276 | 1956 | incall = PETSC_TRUE; | |
| 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.
|
1956 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)pep),((PetscObject)pep)->options,((PetscObject)pep)->prefix,"-pep_converged_reason",&viewer,&format,&flg)); |
| 278 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1956 | if (flg) { |
| 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(PetscViewerPushFormat(viewer,format)); |
| 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(PEPConvergedReasonView(pep,viewer)); |
| 281 |
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)); |
| 282 |
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)); |
| 283 | } | ||
| 284 | 1956 | 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.
|
1956 | PetscFunctionReturn(PETSC_SUCCESS); |
| 286 | } | ||
| 287 | |||
| 288 | 1624 | static PetscErrorCode PEPErrorView_ASCII(PEP pep,PEPErrorType etype,PetscViewer viewer) | |
| 289 | { | ||
| 290 | 1624 | PetscReal error; | |
| 291 | 1624 | PetscInt i,j,k,nvals; | |
| 292 | |||
| 293 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1624 | PetscFunctionBegin; |
| 294 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1624 | nvals = (pep->which==PEP_ALL)? pep->nconv: pep->nev; |
| 295 |
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) { |
| 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 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
1624 | 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 10 times.
✓ Branch 1 taken 10 times.
|
10415 | for (i=0;i<nvals;i++) { |
| 304 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8791 | PetscCall(PEPComputeError(pep,i,etype,&error)); |
| 305 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
8791 | 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.
|
1728 | PetscFunctionReturn(PETSC_SUCCESS); |
| 308 | } | ||
| 309 | } | ||
| 310 |
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)); |
| 311 |
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:")); |
| 312 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3566 | for (i=0;i<=(nvals-1)/8;i++) { |
| 313 |
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 ")); |
| 314 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
10733 | for (j=0;j<PetscMin(8,nvals-8*i);j++) { |
| 315 | 8791 | k = pep->perm[8*i+j]; | |
| 316 |
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])); |
| 317 |
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,", ")); |
| 318 | } | ||
| 319 | } | ||
| 320 |
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")); |
| 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.
|
318 | PetscFunctionReturn(PETSC_SUCCESS); |
| 322 | } | ||
| 323 | |||
| 324 | 35 | static PetscErrorCode PEPErrorView_DETAIL(PEP pep,PEPErrorType etype,PetscViewer viewer) | |
| 325 | { | ||
| 326 | 35 | PetscReal error,re,im; | |
| 327 | 35 | PetscScalar kr,ki; | |
| 328 | 35 | PetscInt i; | |
| 329 | 35 | char ex[30],sep[]=" ---------------------- --------------------\n"; | |
| 330 | |||
| 331 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
35 | PetscFunctionBegin; |
| 332 |
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); |
| 333 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
25 | switch (etype) { |
| 334 | ✗ | case PEP_ERROR_ABSOLUTE: | |
| 335 | ✗ | PetscCall(PetscSNPrintf(ex,sizeof(ex)," ||P(k)x||")); | |
| 336 | break; | ||
| 337 | 15 | case PEP_ERROR_RELATIVE: | |
| 338 |
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||")); |
| 339 | break; | ||
| 340 | 10 | case PEP_ERROR_BACKWARD: | |
| 341 |
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)")); |
| 342 | break; | ||
| 343 | } | ||
| 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.
|
25 | PetscCall(PetscViewerASCIIPrintf(viewer,"%s k %s\n%s",sep,ex,sep)); |
| 345 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
200 | for (i=0;i<pep->nconv;i++) { |
| 346 |
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)); |
| 347 |
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)); |
| 348 | #if defined(PETSC_USE_COMPLEX) | ||
| 349 | 75 | re = PetscRealPart(kr); | |
| 350 | 75 | im = PetscImaginaryPart(kr); | |
| 351 | #else | ||
| 352 | 100 | re = kr; | |
| 353 | 100 | im = ki; | |
| 354 | #endif | ||
| 355 |
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)); |
| 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.
|
175 | else PetscCall(PetscViewerASCIIPrintf(viewer," % 12f %12g\n",(double)re,(double)error)); |
| 357 | } | ||
| 358 |
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)); |
| 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 | 10 | static PetscErrorCode PEPErrorView_MATLAB(PEP pep,PEPErrorType etype,PetscViewer viewer) | |
| 363 | { | ||
| 364 | 10 | PetscReal error; | |
| 365 | 10 | PetscInt i; | |
| 366 | 10 | const char *name; | |
| 367 | |||
| 368 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 369 |
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)); |
| 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.
|
10 | PetscCall(PetscViewerASCIIPrintf(viewer,"Error_%s = [\n",name)); |
| 371 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
130 | for (i=0;i<pep->nconv;i++) { |
| 372 |
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)); |
| 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.
|
120 | PetscCall(PetscViewerASCIIPrintf(viewer,"%18.16e\n",(double)error)); |
| 374 | } | ||
| 375 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | 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 | 1669 | PetscErrorCode PEPErrorView(PEP pep,PEPErrorType etype,PetscViewer viewer) | |
| 411 | { | ||
| 412 | 1669 | PetscBool isascii; | |
| 413 | 1669 | PetscViewerFormat format; | |
| 414 | |||
| 415 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1669 | 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.
|
1669 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
| 417 |
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)); |
| 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.
|
1669 | 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.
|
1669 | 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.
|
1669 | PEPCheckSolved(pep,1); |
| 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.
|
1669 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 422 |
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); |
| 423 | |||
| 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.
|
1669 | PetscCall(PetscViewerGetFormat(viewer,&format)); |
| 425 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
1669 | switch (format) { |
| 426 | 1624 | case PETSC_VIEWER_DEFAULT: | |
| 427 | case PETSC_VIEWER_ASCII_INFO: | ||
| 428 |
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)); |
| 429 | break; | ||
| 430 | 35 | case PETSC_VIEWER_ASCII_INFO_DETAIL: | |
| 431 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
35 | PetscCall(PEPErrorView_DETAIL(pep,etype,viewer)); |
| 432 | break; | ||
| 433 | 10 | case PETSC_VIEWER_ASCII_MATLAB: | |
| 434 |
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)); |
| 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.
|
327 | 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 | 1956 | PetscErrorCode PEPErrorViewFromOptions(PEP pep) | |
| 456 | { | ||
| 457 | 1956 | PetscViewer viewer; | |
| 458 | 1956 | PetscBool flg; | |
| 459 | 1956 | static PetscBool incall = PETSC_FALSE; | |
| 460 | 1956 | PetscViewerFormat format; | |
| 461 | |||
| 462 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1956 | PetscFunctionBegin; |
| 463 |
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); |
| 464 | 1956 | incall = PETSC_TRUE; | |
| 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_absolute",&viewer,&format,&flg)); |
| 466 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1956 | if (flg) { |
| 467 |
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)); |
| 468 |
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)); |
| 469 |
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)); |
| 470 |
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)); |
| 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_relative",&viewer,&format,&flg)); |
| 473 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
1956 | if (flg) { |
| 474 |
4/6✓ Branch 0 taken 1 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)); |
| 475 |
4/6✓ Branch 0 taken 1 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)); |
| 476 |
4/6✓ Branch 0 taken 1 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)); |
| 477 |
4/6✓ Branch 0 taken 1 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)); |
| 478 | } | ||
| 479 |
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)); |
| 480 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1956 | if (flg) { |
| 481 |
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)); |
| 482 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PEPErrorView(pep,PEP_ERROR_BACKWARD,viewer)); |
| 483 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerPopFormat(viewer)); |
| 484 |
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)); |
| 485 | } | ||
| 486 | 1956 | 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.
|
1956 | PetscFunctionReturn(PETSC_SUCCESS); |
| 488 | } | ||
| 489 | |||
| 490 | 16 | static PetscErrorCode PEPValuesView_DRAW(PEP pep,PetscViewer viewer) | |
| 491 | { | ||
| 492 | 16 | PetscDraw draw; | |
| 493 | 16 | PetscDrawSP drawsp; | |
| 494 | 16 | PetscReal re,im; | |
| 495 | 16 | PetscInt i,k; | |
| 496 | |||
| 497 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
| 498 |
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); |
| 499 |
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)); |
| 500 |
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")); |
| 501 |
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)); |
| 502 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
141 | for (i=0;i<pep->nconv;i++) { |
| 503 | 125 | 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 | 80 | re = pep->eigr[k]; | |
| 509 | 80 | im = pep->eigi[k]; | |
| 510 | #endif | ||
| 511 |
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)); |
| 512 | } | ||
| 513 |
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)); |
| 514 |
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)); |
| 515 |
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)); |
| 516 |
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); |
| 517 | } | ||
| 518 | |||
| 519 | 10 | static PetscErrorCode PEPValuesView_BINARY(PEP pep,PetscViewer viewer) | |
| 520 | { | ||
| 521 | #if defined(PETSC_HAVE_COMPLEX) | ||
| 522 | 10 | PetscInt i,k; | |
| 523 | 10 | PetscComplex *ev; | |
| 524 | #endif | ||
| 525 | |||
| 526 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 527 | #if defined(PETSC_HAVE_COMPLEX) | ||
| 528 |
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)); |
| 529 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
130 | for (i=0;i<pep->nconv;i++) { |
| 530 | 120 | k = pep->perm[i]; | |
| 531 | #if defined(PETSC_USE_COMPLEX) | ||
| 532 | 60 | ev[i] = pep->eigr[k]; | |
| 533 | #else | ||
| 534 | 60 | ev[i] = PetscCMPLX(pep->eigr[k],pep->eigi[k]); | |
| 535 | #endif | ||
| 536 | } | ||
| 537 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerBinaryWrite(viewer,ev,pep->nconv,PETSC_COMPLEX)); |
| 538 |
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)); |
| 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 | 10 | static PetscErrorCode PEPValuesView_ASCII(PEP pep,PetscViewer viewer) | |
| 590 | { | ||
| 591 | 10 | PetscInt i,k; | |
| 592 | |||
| 593 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 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,"Eigenvalues = \n")); |
| 595 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
130 | for (i=0;i<pep->nconv;i++) { |
| 596 | 120 | k = pep->perm[i]; | |
| 597 |
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," ")); |
| 598 |
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])); |
| 599 |
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")); |
| 600 | } | ||
| 601 |
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")); |
| 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 | 10 | static PetscErrorCode PEPValuesView_MATLAB(PEP pep,PetscViewer viewer) | |
| 606 | { | ||
| 607 | 10 | PetscInt i,k; | |
| 608 | 10 | PetscReal re,im; | |
| 609 | 10 | const char *name; | |
| 610 | |||
| 611 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 612 |
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)); |
| 613 |
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)); |
| 614 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
30 | for (i=0;i<pep->nconv;i++) { |
| 615 | 20 | k = pep->perm[i]; | |
| 616 | #if defined(PETSC_USE_COMPLEX) | ||
| 617 | 10 | re = PetscRealPart(pep->eigr[k]); | |
| 618 | 10 | im = PetscImaginaryPart(pep->eigr[k]); | |
| 619 | #else | ||
| 620 | 10 | re = pep->eigr[k]; | |
| 621 | 10 | im = pep->eigi[k]; | |
| 622 | #endif | ||
| 623 |
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)); |
| 624 |
4/6✓ Branch 0 taken 1 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)); |
| 625 | } | ||
| 626 |
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")); |
| 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 | 46 | PetscErrorCode PEPValuesView(PEP pep,PetscViewer viewer) | |
| 653 | { | ||
| 654 | 46 | PetscBool isascii,isdraw,isbinary; | |
| 655 | 46 | 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.
|
46 | 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.
|
46 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
| 662 |
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)); |
| 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.
|
46 | 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.
|
46 | 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.
|
46 | PEPCheckSolved(pep,1); |
| 666 |
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)); |
| 667 |
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)); |
| 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 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)); |
| 672 |
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)); |
| 673 |
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)); |
| 674 | #if defined(PETSC_HAVE_HDF5) | ||
| 675 | else if (ishdf5) PetscCall(PEPValuesView_HDF5(pep,viewer)); | ||
| 676 | #endif | ||
| 677 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | else if (isascii) { |
| 678 |
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)); |
| 679 |
2/3✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
|
20 | switch (format) { |
| 680 | 10 | 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 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)); |
| 684 | break; | ||
| 685 | 10 | case PETSC_VIEWER_ASCII_MATLAB: | |
| 686 |
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)); |
| 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.
|
8 | 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 | 1956 | PetscErrorCode PEPValuesViewFromOptions(PEP pep) | |
| 709 | { | ||
| 710 | 1956 | PetscViewer viewer; | |
| 711 | 1956 | PetscBool flg; | |
| 712 | 1956 | static PetscBool incall = PETSC_FALSE; | |
| 713 | 1956 | PetscViewerFormat format; | |
| 714 | |||
| 715 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1956 | PetscFunctionBegin; |
| 716 |
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); |
| 717 | 1956 | incall = PETSC_TRUE; | |
| 718 |
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)); |
| 719 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1956 | if (flg) { |
| 720 |
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)); |
| 721 |
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)); |
| 722 |
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)); |
| 723 |
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)); |
| 724 | } | ||
| 725 | 1956 | 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.
|
1956 | 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 | 10 | PetscErrorCode PEPVectorsView(PEP pep,PetscViewer viewer) | |
| 755 | { | ||
| 756 | 10 | PetscInt i,k; | |
| 757 | 10 | Vec xr,xi=NULL; | |
| 758 | |||
| 759 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | 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.
|
10 | PetscValidHeaderSpecific(pep,PEP_CLASSID,1); |
| 761 |
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)); |
| 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.
|
10 | 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.
|
10 | 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.
|
10 | PEPCheckSolved(pep,1); |
| 765 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (pep->nconv) { |
| 766 |
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)); |
| 767 |
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)); |
| 768 | #if !defined(PETSC_USE_COMPLEX) | ||
| 769 |
4/6✓ Branch 0 taken 1 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)); |
| 770 | #endif | ||
| 771 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
25 | for (i=0;i<pep->nconv;i++) { |
| 772 | 15 | k = pep->perm[i]; | |
| 773 |
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)); |
| 774 |
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)); |
| 775 | } | ||
| 776 |
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)); |
| 777 | #if !defined(PETSC_USE_COMPLEX) | ||
| 778 |
4/6✓ Branch 0 taken 1 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)); |
| 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 | 1956 | PetscErrorCode PEPVectorsViewFromOptions(PEP pep) | |
| 798 | { | ||
| 799 | 1956 | PetscViewer viewer; | |
| 800 | 1956 | PetscBool flg = PETSC_FALSE; | |
| 801 | 1956 | static PetscBool incall = PETSC_FALSE; | |
| 802 | 1956 | PetscViewerFormat format; | |
| 803 | |||
| 804 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1956 | PetscFunctionBegin; |
| 805 |
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); |
| 806 | 1956 | incall = PETSC_TRUE; | |
| 807 |
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)); |
| 808 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1956 | if (flg) { |
| 809 |
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)); |
| 810 |
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)); |
| 811 |
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)); |
| 812 |
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)); |
| 813 | } | ||
| 814 | 1956 | 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.
|
1956 | PetscFunctionReturn(PETSC_SUCCESS); |
| 816 | } | ||
| 817 |