| 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 SVD routines related to various viewers | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/ | ||
| 15 | #include <petscdraw.h> | ||
| 16 | |||
| 17 | /*@ | ||
| 18 | SVDView - Prints the `SVD` data structure. | ||
| 19 | |||
| 20 | Collective | ||
| 21 | |||
| 22 | Input Parameters: | ||
| 23 | + svd - the singular value solver context | ||
| 24 | - viewer - optional visualization context | ||
| 25 | |||
| 26 | Options Database Key: | ||
| 27 | . -svd_view - calls `SVDView()` at end of `SVDSolve()` | ||
| 28 | |||
| 29 | Notes: | ||
| 30 | The available visualization contexts include | ||
| 31 | + `PETSC_VIEWER_STDOUT_SELF` - standard output (default) | ||
| 32 | - `PETSC_VIEWER_STDOUT_WORLD` - synchronized standard output where only the | ||
| 33 | first process opens the file; all other processes send their data to the | ||
| 34 | first one to print | ||
| 35 | |||
| 36 | The user can open an alternative visualization context with `PetscViewerASCIIOpen()` | ||
| 37 | to output to a specified file. | ||
| 38 | |||
| 39 | Level: beginner | ||
| 40 | |||
| 41 | .seealso: [](ch:svd), `SVDCreate()`, `SVDViewFromOptions()`, `EPSView()` | ||
| 42 | @*/ | ||
| 43 | 28 | PetscErrorCode SVDView(SVD svd,PetscViewer viewer) | |
| 44 | { | ||
| 45 | 28 | const char *type=NULL; | |
| 46 | 28 | PetscBool isascii,isshell,isexternal; | |
| 47 | |||
| 48 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
28 | PetscFunctionBegin; |
| 49 |
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.
|
28 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 50 |
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.
|
28 | if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)svd),&viewer)); |
| 51 |
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.
|
28 | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2); |
| 52 |
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.
|
28 | PetscCheckSameComm(svd,1,viewer,2); |
| 53 | |||
| 54 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 55 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
28 | if (isascii) { |
| 56 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscObjectPrintClassNamePrefixType((PetscObject)svd,viewer)); |
| 57 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIPushTab(viewer)); |
| 58 |
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.
|
28 | PetscTryTypeMethod(svd,view,viewer); |
| 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.
|
28 | PetscCall(PetscViewerASCIIPopTab(viewer)); |
| 60 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
28 | if (svd->problem_type) { |
| 61 |
1/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
28 | switch (svd->problem_type) { |
| 62 | 28 | case SVD_STANDARD: type = "(standard) singular value problem"; break; | |
| 63 | ✗ | case SVD_GENERALIZED: type = "generalized singular value problem"; break; | |
| 64 | ✗ | case SVD_HYPERBOLIC: type = "hyperbolic singular value problem"; break; | |
| 65 | } | ||
| 66 | } else type = "not yet set"; | ||
| 67 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," problem type: %s\n",type)); |
| 68 |
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.
|
56 | PetscCall(PetscViewerASCIIPrintf(viewer," transpose mode: %s\n",svd->impltrans?"implicit":"explicit")); |
| 69 |
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.
|
28 | if (svd->which == SVD_LARGEST) PetscCall(PetscViewerASCIIPrintf(viewer," selected portion of the spectrum: largest\n")); |
| 70 | ✗ | else PetscCall(PetscViewerASCIIPrintf(viewer," selected portion of the spectrum: smallest\n")); | |
| 71 |
1/12✗ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
28 | if (svd->stop==SVD_STOP_THRESHOLD) PetscCall(PetscViewerASCIIPrintf(viewer," computing singular values %s the threshold: %g%s\n",svd->which==SVD_LARGEST?"above":"below",(double)svd->thres,svd->threlative?" (relative)":"")); |
| 72 |
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.
|
28 | if (svd->nsv) PetscCall(PetscViewerASCIIPrintf(viewer," number of singular values (nsv): %" PetscInt_FMT "\n",svd->nsv)); |
| 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.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," number of column vectors (ncv): %" PetscInt_FMT "\n",svd->ncv)); |
| 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.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," maximum dimension of projected problem (mpd): %" PetscInt_FMT "\n",svd->mpd)); |
| 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.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," maximum number of iterations: %" PetscInt_FMT "\n",svd->max_it)); |
| 76 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," tolerance: %g\n",(double)svd->tol)); |
| 77 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," convergence test: ")); |
| 78 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE)); |
| 79 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
28 | switch (svd->conv) { |
| 80 | ✗ | case SVD_CONV_ABS: | |
| 81 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"absolute\n"));break; | |
| 82 | 28 | case SVD_CONV_REL: | |
| 83 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer,"relative to the singular value\n"));break; |
| 84 | ✗ | case SVD_CONV_NORM: | |
| 85 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"relative to the matrix norms\n")); | |
| 86 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer," computed matrix norms: norm(A)=%g",(double)svd->nrma)); | |
| 87 | ✗ | if (svd->isgeneralized) PetscCall(PetscViewerASCIIPrintf(viewer,", norm(B)=%g",(double)svd->nrmb)); | |
| 88 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"\n")); | |
| 89 | break; | ||
| 90 | ✗ | case SVD_CONV_MAXIT: | |
| 91 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"maximum number of iterations\n"));break; | |
| 92 | ✗ | case SVD_CONV_USER: | |
| 93 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"user-defined\n"));break; | |
| 94 | } | ||
| 95 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_TRUE)); |
| 96 |
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.
|
28 | if (svd->nini) PetscCall(PetscViewerASCIIPrintf(viewer," dimension of user-provided initial space: %" PetscInt_FMT "\n",PetscAbs(svd->nini))); |
| 97 |
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.
|
28 | if (svd->ninil) PetscCall(PetscViewerASCIIPrintf(viewer," dimension of user-provided initial left space: %" PetscInt_FMT "\n",PetscAbs(svd->ninil))); |
| 98 | ✗ | } else PetscTryTypeMethod(svd,view,viewer); | |
| 99 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscObjectTypeCompareAny((PetscObject)svd,&isshell,SVDCROSS,SVDCYCLIC,"")); |
| 100 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscObjectTypeCompareAny((PetscObject)svd,&isexternal,SVDSCALAPACK,SVDKSVD,SVDELEMENTAL,SVDPRIMME,"")); |
| 101 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
28 | if (!isshell && !isexternal) { |
| 102 |
4/6✓ Branch 0 taken 2 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,PETSC_VIEWER_ASCII_INFO)); |
| 103 |
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 (!svd->V) PetscCall(SVDGetBV(svd,&svd->V,NULL)); |
| 104 |
4/6✓ Branch 0 taken 2 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(BVView(svd->V,viewer)); |
| 105 |
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 (!svd->ds) PetscCall(SVDGetDS(svd,&svd->ds)); |
| 106 |
4/6✓ Branch 0 taken 2 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(DSView(svd->ds,viewer)); |
| 107 |
4/6✓ Branch 0 taken 2 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)); |
| 108 | } | ||
| 109 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
| 110 | } | ||
| 111 | |||
| 112 | /*@ | ||
| 113 | SVDViewFromOptions - View (print) an `SVD` object based on values in the options database. | ||
| 114 | |||
| 115 | Collective | ||
| 116 | |||
| 117 | Input Parameters: | ||
| 118 | + svd - the singular value solver context | ||
| 119 | . obj - optional object that provides the options prefix used to query the options database | ||
| 120 | - name - command line option | ||
| 121 | |||
| 122 | Level: intermediate | ||
| 123 | |||
| 124 | .seealso: [](ch:svd), `SVDView()`, `SVDCreate()`, `PetscObjectViewFromOptions()` | ||
| 125 | @*/ | ||
| 126 | 5546 | PetscErrorCode SVDViewFromOptions(SVD svd,PetscObject obj,const char name[]) | |
| 127 | { | ||
| 128 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
5546 | PetscFunctionBegin; |
| 129 |
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.
|
5546 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 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.
|
5546 | PetscCall(PetscObjectViewFromOptions((PetscObject)svd,obj,name)); |
| 131 |
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.
|
1094 | PetscFunctionReturn(PETSC_SUCCESS); |
| 132 | } | ||
| 133 | |||
| 134 | /*@ | ||
| 135 | SVDConvergedReasonView - Displays the reason an `SVD` solve converged or diverged. | ||
| 136 | |||
| 137 | Collective | ||
| 138 | |||
| 139 | Input Parameters: | ||
| 140 | + svd - the singular value solver context | ||
| 141 | - viewer - the viewer to display the reason | ||
| 142 | |||
| 143 | Options Database Key: | ||
| 144 | . -svd_converged_reason - print reason for convergence/divergence, and number of iterations | ||
| 145 | |||
| 146 | Notes: | ||
| 147 | Use `SVDConvergedReasonViewFromOptions()` to display the reason based on values | ||
| 148 | in the options database. | ||
| 149 | |||
| 150 | To change the format of the output call `PetscViewerPushFormat()` before this | ||
| 151 | call. Use `PETSC_VIEWER_DEFAULT` for the default, or `PETSC_VIEWER_FAILED` to only | ||
| 152 | display a reason if it fails. The latter can be set in the command line with | ||
| 153 | `-svd_converged_reason ::failed`. | ||
| 154 | |||
| 155 | Level: intermediate | ||
| 156 | |||
| 157 | .seealso: [](ch:svd), `SVDSetTolerances()`, `SVDGetIterationNumber()`, `SVDConvergedReasonViewFromOptions()` | ||
| 158 | @*/ | ||
| 159 | 28 | PetscErrorCode SVDConvergedReasonView(SVD svd,PetscViewer viewer) | |
| 160 | { | ||
| 161 | 28 | PetscBool isAscii; | |
| 162 | 28 | PetscViewerFormat format; | |
| 163 | |||
| 164 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
28 | PetscFunctionBegin; |
| 165 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
28 | if (!viewer) viewer = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)svd)); |
| 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.
|
28 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isAscii)); |
| 167 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
28 | if (isAscii) { |
| 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.
|
28 | PetscCall(PetscViewerGetFormat(viewer,&format)); |
| 169 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIAddTab(viewer,((PetscObject)svd)->tablevel)); |
| 170 |
9/14✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
28 | if (svd->reason > 0 && format != PETSC_VIEWER_FAILED) PetscCall(PetscViewerASCIIPrintf(viewer,"%s SVD solve converged (%" PetscInt_FMT " singular triplet%s) due to %s; iterations %" PetscInt_FMT "\n",((PetscObject)svd)->prefix?((PetscObject)svd)->prefix:"",svd->nconv,(svd->nconv>1)?"s":"",SVDConvergedReasons[svd->reason],svd->its)); |
| 171 | ✗ | else if (svd->reason <= 0) PetscCall(PetscViewerASCIIPrintf(viewer,"%s SVD solve did not converge due to %s; iterations %" PetscInt_FMT "\n",((PetscObject)svd)->prefix?((PetscObject)svd)->prefix:"",SVDConvergedReasons[svd->reason],svd->its)); | |
| 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.
|
28 | PetscCall(PetscViewerASCIISubtractTab(viewer,((PetscObject)svd)->tablevel)); |
| 173 | } | ||
| 174 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
| 175 | } | ||
| 176 | |||
| 177 | /*@ | ||
| 178 | SVDConvergedReasonViewFromOptions - Processes command line options to determine if/how | ||
| 179 | the `SVD` converged reason is to be viewed. | ||
| 180 | |||
| 181 | Collective | ||
| 182 | |||
| 183 | Input Parameter: | ||
| 184 | . svd - the singular value solver context | ||
| 185 | |||
| 186 | Level: intermediate | ||
| 187 | |||
| 188 | .seealso: [](ch:svd), `SVDConvergedReasonView()` | ||
| 189 | @*/ | ||
| 190 | 2773 | PetscErrorCode SVDConvergedReasonViewFromOptions(SVD svd) | |
| 191 | { | ||
| 192 | 2773 | PetscViewer viewer; | |
| 193 | 2773 | PetscBool flg; | |
| 194 | 2773 | static PetscBool incall = PETSC_FALSE; | |
| 195 | 2773 | PetscViewerFormat format; | |
| 196 | |||
| 197 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2773 | PetscFunctionBegin; |
| 198 |
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.
|
2773 | if (incall) PetscFunctionReturn(PETSC_SUCCESS); |
| 199 | 2773 | incall = PETSC_TRUE; | |
| 200 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2773 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)svd),((PetscObject)svd)->options,((PetscObject)svd)->prefix,"-svd_converged_reason",&viewer,&format,&flg)); |
| 201 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2773 | if (flg) { |
| 202 |
4/6✓ Branch 0 taken 2 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(PetscViewerPushFormat(viewer,format)); |
| 203 |
4/6✓ Branch 0 taken 2 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(SVDConvergedReasonView(svd,viewer)); |
| 204 |
4/6✓ Branch 0 taken 2 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(PetscViewerPopFormat(viewer)); |
| 205 |
4/6✓ Branch 0 taken 2 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(PetscViewerDestroy(&viewer)); |
| 206 | } | ||
| 207 | 2773 | incall = PETSC_FALSE; | |
| 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.
|
2773 | PetscFunctionReturn(PETSC_SUCCESS); |
| 209 | } | ||
| 210 | |||
| 211 | 2123 | static PetscErrorCode SVDErrorView_ASCII(SVD svd,SVDErrorType etype,PetscViewer viewer) | |
| 212 | { | ||
| 213 | 2123 | PetscReal error,sigma; | |
| 214 | 2123 | PetscInt i,j,numsv; | |
| 215 | |||
| 216 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2123 | PetscFunctionBegin; |
| 217 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 10 times.
|
2123 | numsv = svd->stop==SVD_STOP_THRESHOLD? svd->nconv: svd->nsv; |
| 218 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
2123 | if (svd->nconv<numsv) { |
| 219 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer," Problem: less than %" PetscInt_FMT " singular values converged\n\n",numsv)); | |
| 220 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 221 | } | ||
| 222 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
12617 | for (i=0;i<numsv;i++) { |
| 223 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10494 | PetscCall(SVDComputeError(svd,i,etype,&error)); |
| 224 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10494 | if (error>=5.0*svd->tol) { |
| 225 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer," Problem: some of the first %" PetscInt_FMT " relative errors are higher than the tolerance\n\n",numsv)); | |
| 226 |
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.
|
2526 | PetscFunctionReturn(PETSC_SUCCESS); |
| 227 | } | ||
| 228 | } | ||
| 229 |
9/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
5698 | PetscCall(PetscViewerASCIIPrintf(viewer," All %s%ssingular values computed up to the required tolerance:",svd->stop==SVD_STOP_THRESHOLD?"":"requested ",svd->isgeneralized?"generalized ":"")); |
| 230 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4652 | for (i=0;i<=(numsv-1)/8;i++) { |
| 231 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2529 | PetscCall(PetscViewerASCIIPrintf(viewer,"\n ")); |
| 232 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
13023 | for (j=0;j<PetscMin(8,numsv-8*i);j++) { |
| 233 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10494 | PetscCall(SVDGetSingularTriplet(svd,8*i+j,&sigma,NULL,NULL)); |
| 234 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10494 | PetscCall(PetscViewerASCIIPrintf(viewer,"%.5f",(double)sigma)); |
| 235 |
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.
|
10494 | if (8*i+j+1<numsv) PetscCall(PetscViewerASCIIPrintf(viewer,", ")); |
| 236 | } | ||
| 237 | } | ||
| 238 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2123 | PetscCall(PetscViewerASCIIPrintf(viewer,"\n\n")); |
| 239 |
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.
|
419 | PetscFunctionReturn(PETSC_SUCCESS); |
| 240 | } | ||
| 241 | |||
| 242 | 38 | static PetscErrorCode SVDErrorView_DETAIL(SVD svd,SVDErrorType etype,PetscViewer viewer) | |
| 243 | { | ||
| 244 | 38 | PetscReal error,sigma; | |
| 245 | 38 | PetscInt i; | |
| 246 | 38 | char ex[30],sep[]=" ---------------------- --------------------\n"; | |
| 247 | |||
| 248 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
38 | PetscFunctionBegin; |
| 249 |
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.
|
38 | if (!svd->nconv) PetscFunctionReturn(PETSC_SUCCESS); |
| 250 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
38 | switch (etype) { |
| 251 | ✗ | case SVD_ERROR_ABSOLUTE: | |
| 252 | ✗ | PetscCall(PetscSNPrintf(ex,sizeof(ex)," absolute error")); | |
| 253 | break; | ||
| 254 | 28 | case SVD_ERROR_RELATIVE: | |
| 255 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscSNPrintf(ex,sizeof(ex)," relative error")); |
| 256 | break; | ||
| 257 | 10 | case SVD_ERROR_NORM: | |
| 258 |
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 (svd->isgeneralized) PetscCall(PetscSNPrintf(ex,sizeof(ex)," ||r||/||[A;B]||")); |
| 259 |
4/6✓ Branch 0 taken 2 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 | else PetscCall(PetscSNPrintf(ex,sizeof(ex)," ||r||/||A||")); |
| 260 | break; | ||
| 261 | } | ||
| 262 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
38 | PetscCall(PetscViewerASCIIPrintf(viewer,"%s sigma %s\n%s",sep,ex,sep)); |
| 263 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
258 | for (i=0;i<svd->nconv;i++) { |
| 264 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
220 | PetscCall(SVDGetSingularTriplet(svd,i,&sigma,NULL,NULL)); |
| 265 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
220 | PetscCall(SVDComputeError(svd,i,etype,&error)); |
| 266 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
220 | PetscCall(PetscViewerASCIIPrintf(viewer," % 6f %12g\n",(double)sigma,(double)error)); |
| 267 | } | ||
| 268 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
38 | PetscCall(PetscViewerASCIIPrintf(viewer,"%s",sep)); |
| 269 |
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); |
| 270 | } | ||
| 271 | |||
| 272 | 20 | static PetscErrorCode SVDErrorView_MATLAB(SVD svd,SVDErrorType etype,PetscViewer viewer) | |
| 273 | { | ||
| 274 | 20 | PetscReal error; | |
| 275 | 20 | PetscInt i; | |
| 276 | 20 | const char *name; | |
| 277 | |||
| 278 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 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.
|
20 | PetscCall(PetscObjectGetName((PetscObject)svd,&name)); |
| 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.
|
20 | PetscCall(PetscViewerASCIIPrintf(viewer,"Error_%s = [\n",name)); |
| 281 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
140 | for (i=0;i<svd->nconv;i++) { |
| 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.
|
120 | PetscCall(SVDComputeError(svd,i,etype,&error)); |
| 283 |
4/6✓ Branch 0 taken 2 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)); |
| 284 | } | ||
| 285 |
4/6✓ Branch 0 taken 2 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(PetscViewerASCIIPrintf(viewer,"];\n")); |
| 286 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
| 287 | } | ||
| 288 | |||
| 289 | /*@ | ||
| 290 | SVDErrorView - Displays the errors associated with the computed solution | ||
| 291 | (as well as the singular values). | ||
| 292 | |||
| 293 | Collective | ||
| 294 | |||
| 295 | Input Parameters: | ||
| 296 | + svd - the singular value solver context | ||
| 297 | . etype - error type | ||
| 298 | - viewer - optional visualization context | ||
| 299 | |||
| 300 | Options Database Keys: | ||
| 301 | + -svd_error_absolute - print absolute errors of each singular triplet | ||
| 302 | . -svd_error_relative - print relative errors of each singular triplet | ||
| 303 | - -svd_error_norm - print errors relative to the matrix norms of each singular triplet | ||
| 304 | |||
| 305 | Notes: | ||
| 306 | By default, this function checks the error of all singular triplets and prints | ||
| 307 | the singular values if all of them are below the requested tolerance. | ||
| 308 | If the viewer has format `PETSC_VIEWER_ASCII_INFO_DETAIL` then a table with | ||
| 309 | singular values and corresponding errors is printed. | ||
| 310 | |||
| 311 | All the command-line options listed above admit an optional argument | ||
| 312 | specifying the viewer type and options. For instance, use | ||
| 313 | `-svd_error_relative :myerr.m:ascii_matlab` to save the errors in a file | ||
| 314 | that can be executed in Matlab. | ||
| 315 | |||
| 316 | Level: intermediate | ||
| 317 | |||
| 318 | .seealso: [](ch:svd), `SVDSolve()`, `SVDValuesView()`, `SVDVectorsView()` | ||
| 319 | @*/ | ||
| 320 | 2181 | PetscErrorCode SVDErrorView(SVD svd,SVDErrorType etype,PetscViewer viewer) | |
| 321 | { | ||
| 322 | 2181 | PetscBool isascii; | |
| 323 | 2181 | PetscViewerFormat format; | |
| 324 | |||
| 325 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2181 | PetscFunctionBegin; |
| 326 |
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.
|
2181 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 327 |
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.
|
2181 | if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)svd),&viewer)); |
| 328 |
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.
|
2181 | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,3); |
| 329 |
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.
|
2181 | PetscCheckSameComm(svd,1,viewer,3); |
| 330 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2181 | SVDCheckSolved(svd,1); |
| 331 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2181 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 332 |
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.
|
2181 | if (!isascii) PetscFunctionReturn(PETSC_SUCCESS); |
| 333 | |||
| 334 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2181 | PetscCall(PetscViewerGetFormat(viewer,&format)); |
| 335 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
2181 | switch (format) { |
| 336 | 2123 | case PETSC_VIEWER_DEFAULT: | |
| 337 | case PETSC_VIEWER_ASCII_INFO: | ||
| 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.
|
2123 | PetscCall(SVDErrorView_ASCII(svd,etype,viewer)); |
| 339 | break; | ||
| 340 | 38 | case PETSC_VIEWER_ASCII_INFO_DETAIL: | |
| 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.
|
38 | PetscCall(SVDErrorView_DETAIL(svd,etype,viewer)); |
| 342 | break; | ||
| 343 | 20 | case PETSC_VIEWER_ASCII_MATLAB: | |
| 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.
|
20 | PetscCall(SVDErrorView_MATLAB(svd,etype,viewer)); |
| 345 | break; | ||
| 346 | ✗ | default: | |
| 347 | ✗ | PetscCall(PetscInfo(svd,"Unsupported viewer format %s\n",PetscViewerFormats[format])); | |
| 348 | } | ||
| 349 |
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.
|
431 | PetscFunctionReturn(PETSC_SUCCESS); |
| 350 | } | ||
| 351 | |||
| 352 | /*@ | ||
| 353 | SVDErrorViewFromOptions - Processes command line options to determine if/how | ||
| 354 | the errors of the computed solution are to be viewed. | ||
| 355 | |||
| 356 | Collective | ||
| 357 | |||
| 358 | Input Parameter: | ||
| 359 | . svd - the singular value solver context | ||
| 360 | |||
| 361 | Level: developer | ||
| 362 | |||
| 363 | .seealso: [](ch:svd), `SVDErrorView()` | ||
| 364 | @*/ | ||
| 365 | 2773 | PetscErrorCode SVDErrorViewFromOptions(SVD svd) | |
| 366 | { | ||
| 367 | 2773 | PetscViewer viewer; | |
| 368 | 2773 | PetscBool flg; | |
| 369 | 2773 | static PetscBool incall = PETSC_FALSE; | |
| 370 | 2773 | PetscViewerFormat format; | |
| 371 | |||
| 372 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2773 | PetscFunctionBegin; |
| 373 |
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.
|
2773 | if (incall) PetscFunctionReturn(PETSC_SUCCESS); |
| 374 | 2773 | incall = PETSC_TRUE; | |
| 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.
|
2773 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)svd),((PetscObject)svd)->options,((PetscObject)svd)->prefix,"-svd_error_absolute",&viewer,&format,&flg)); |
| 376 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2773 | if (flg) { |
| 377 |
4/6✓ Branch 0 taken 2 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(PetscViewerPushFormat(viewer,format)); |
| 378 |
4/6✓ Branch 0 taken 2 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(SVDErrorView(svd,SVD_ERROR_ABSOLUTE,viewer)); |
| 379 |
4/6✓ Branch 0 taken 2 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(PetscViewerPopFormat(viewer)); |
| 380 |
4/6✓ Branch 0 taken 2 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(PetscViewerDestroy(&viewer)); |
| 381 | } | ||
| 382 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2773 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)svd),((PetscObject)svd)->options,((PetscObject)svd)->prefix,"-svd_error_relative",&viewer,&format,&flg)); |
| 383 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2773 | if (flg) { |
| 384 |
4/6✓ Branch 0 taken 2 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(PetscViewerPushFormat(viewer,format)); |
| 385 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(SVDErrorView(svd,SVD_ERROR_RELATIVE,viewer)); |
| 386 |
4/6✓ Branch 0 taken 2 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(PetscViewerPopFormat(viewer)); |
| 387 |
4/6✓ Branch 0 taken 2 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(PetscViewerDestroy(&viewer)); |
| 388 | } | ||
| 389 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2773 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)svd),((PetscObject)svd)->options,((PetscObject)svd)->prefix,"-svd_error_norm",&viewer,&format,&flg)); |
| 390 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2773 | if (flg) { |
| 391 |
4/6✓ Branch 0 taken 2 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)); |
| 392 |
4/6✓ Branch 0 taken 2 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(SVDErrorView(svd,SVD_ERROR_NORM,viewer)); |
| 393 |
4/6✓ Branch 0 taken 2 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)); |
| 394 |
4/6✓ Branch 0 taken 2 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)); |
| 395 | } | ||
| 396 | 2773 | incall = PETSC_FALSE; | |
| 397 |
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.
|
2773 | PetscFunctionReturn(PETSC_SUCCESS); |
| 398 | } | ||
| 399 | |||
| 400 | 16 | static PetscErrorCode SVDValuesView_DRAW(SVD svd,PetscViewer viewer) | |
| 401 | { | ||
| 402 | 16 | PetscDraw draw; | |
| 403 | 16 | PetscDrawSP drawsp; | |
| 404 | 16 | PetscReal re,im=0.0; | |
| 405 | 16 | PetscInt i; | |
| 406 | |||
| 407 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
| 408 |
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 (!svd->nconv) PetscFunctionReturn(PETSC_SUCCESS); |
| 409 |
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)); |
| 410 |
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 singular values")); |
| 411 |
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)); |
| 412 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
144 | for (i=0;i<svd->nconv;i++) { |
| 413 | 128 | re = svd->sigma[svd->perm[i]]; | |
| 414 |
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.
|
128 | PetscCall(PetscDrawSPAddPoint(drawsp,&re,&im)); |
| 415 | } | ||
| 416 |
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)); |
| 417 |
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)); |
| 418 |
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)); |
| 419 |
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); |
| 420 | } | ||
| 421 | |||
| 422 | 10 | static PetscErrorCode SVDValuesView_BINARY(SVD svd,PetscViewer viewer) | |
| 423 | { | ||
| 424 | 10 | PetscInt i,k; | |
| 425 | 10 | PetscReal *sv; | |
| 426 | |||
| 427 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 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.
|
10 | PetscCall(PetscMalloc1(svd->nconv,&sv)); |
| 429 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
70 | for (i=0;i<svd->nconv;i++) { |
| 430 | 60 | k = svd->perm[i]; | |
| 431 | 60 | sv[i] = svd->sigma[k]; | |
| 432 | } | ||
| 433 |
4/6✓ Branch 0 taken 2 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,sv,svd->nconv,PETSC_REAL)); |
| 434 |
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(sv)); |
| 435 |
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); |
| 436 | } | ||
| 437 | |||
| 438 | #if defined(PETSC_HAVE_HDF5) | ||
| 439 | static PetscErrorCode SVDValuesView_HDF5(SVD svd,PetscViewer viewer) | ||
| 440 | { | ||
| 441 | PetscInt i,k,n,N; | ||
| 442 | PetscMPIInt rank; | ||
| 443 | Vec v; | ||
| 444 | char vname[30]; | ||
| 445 | const char *ename; | ||
| 446 | |||
| 447 | PetscFunctionBegin; | ||
| 448 | PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)svd),&rank)); | ||
| 449 | N = svd->nconv; | ||
| 450 | n = rank? 0: N; | ||
| 451 | /* create a vector containing the singular values */ | ||
| 452 | PetscCall(VecCreateMPI(PetscObjectComm((PetscObject)svd),n,N,&v)); | ||
| 453 | PetscCall(PetscObjectGetName((PetscObject)svd,&ename)); | ||
| 454 | PetscCall(PetscSNPrintf(vname,sizeof(vname),"sigma_%s",ename)); | ||
| 455 | PetscCall(PetscObjectSetName((PetscObject)v,vname)); | ||
| 456 | if (!rank) { | ||
| 457 | for (i=0;i<svd->nconv;i++) { | ||
| 458 | k = svd->perm[i]; | ||
| 459 | PetscCall(VecSetValue(v,i,svd->sigma[k],INSERT_VALUES)); | ||
| 460 | } | ||
| 461 | } | ||
| 462 | PetscCall(VecAssemblyBegin(v)); | ||
| 463 | PetscCall(VecAssemblyEnd(v)); | ||
| 464 | PetscCall(VecView(v,viewer)); | ||
| 465 | PetscCall(VecDestroy(&v)); | ||
| 466 | PetscFunctionReturn(PETSC_SUCCESS); | ||
| 467 | } | ||
| 468 | #endif | ||
| 469 | |||
| 470 | 20 | static PetscErrorCode SVDValuesView_ASCII(SVD svd,PetscViewer viewer) | |
| 471 | { | ||
| 472 | 20 | PetscInt i; | |
| 473 | |||
| 474 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 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.
|
20 | PetscCall(PetscViewerASCIIPrintf(viewer,"Singular values = \n")); |
| 476 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
140 | for (i=0;i<svd->nconv;i++) PetscCall(PetscViewerASCIIPrintf(viewer," %.5f\n",(double)svd->sigma[svd->perm[i]])); |
| 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.
|
20 | PetscCall(PetscViewerASCIIPrintf(viewer,"\n")); |
| 478 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
| 479 | } | ||
| 480 | |||
| 481 | 10 | static PetscErrorCode SVDValuesView_MATLAB(SVD svd,PetscViewer viewer) | |
| 482 | { | ||
| 483 | 10 | PetscInt i; | |
| 484 | 10 | const char *name; | |
| 485 | |||
| 486 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 487 |
4/6✓ Branch 0 taken 2 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)svd,&name)); |
| 488 |
4/6✓ Branch 0 taken 2 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,"Sigma_%s = [\n",name)); |
| 489 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
45 | for (i=0;i<svd->nconv;i++) PetscCall(PetscViewerASCIIPrintf(viewer,"%18.16e\n",(double)svd->sigma[svd->perm[i]])); |
| 490 |
4/6✓ Branch 0 taken 2 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")); |
| 491 |
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); |
| 492 | } | ||
| 493 | |||
| 494 | /*@ | ||
| 495 | SVDValuesView - Displays the computed singular values in a viewer. | ||
| 496 | |||
| 497 | Collective | ||
| 498 | |||
| 499 | Input Parameters: | ||
| 500 | + svd - the singular value solver context | ||
| 501 | - viewer - the viewer | ||
| 502 | |||
| 503 | Options Database Key: | ||
| 504 | . -svd_view_values - print computed singular values | ||
| 505 | |||
| 506 | Note: | ||
| 507 | The command-line option listed above admits an optional argument | ||
| 508 | specifying the viewer type and options. For instance, use | ||
| 509 | `-svd_view_values :evals.m:ascii_matlab` to save the values in a file | ||
| 510 | that can be executed in Matlab. | ||
| 511 | |||
| 512 | Level: intermediate | ||
| 513 | |||
| 514 | .seealso: [](ch:svd), `SVDSolve()`, `SVDVectorsView()`, `SVDErrorView()` | ||
| 515 | @*/ | ||
| 516 | 56 | PetscErrorCode SVDValuesView(SVD svd,PetscViewer viewer) | |
| 517 | { | ||
| 518 | 56 | PetscBool isascii,isdraw,isbinary; | |
| 519 | 56 | PetscViewerFormat format; | |
| 520 | #if defined(PETSC_HAVE_HDF5) | ||
| 521 | PetscBool ishdf5; | ||
| 522 | #endif | ||
| 523 | |||
| 524 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
56 | PetscFunctionBegin; |
| 525 |
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.
|
56 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 526 |
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.
|
56 | if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)svd),&viewer)); |
| 527 |
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.
|
56 | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2); |
| 528 |
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.
|
56 | PetscCheckSameComm(svd,1,viewer,2); |
| 529 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
56 | SVDCheckSolved(svd,1); |
| 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.
|
56 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw)); |
| 531 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
56 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERBINARY,&isbinary)); |
| 532 | #if defined(PETSC_HAVE_HDF5) | ||
| 533 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERHDF5,&ishdf5)); | ||
| 534 | #endif | ||
| 535 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
56 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 536 |
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.
|
56 | if (isdraw) PetscCall(SVDValuesView_DRAW(svd,viewer)); |
| 537 |
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.
|
40 | else if (isbinary) PetscCall(SVDValuesView_BINARY(svd,viewer)); |
| 538 | #if defined(PETSC_HAVE_HDF5) | ||
| 539 | else if (ishdf5) PetscCall(SVDValuesView_HDF5(svd,viewer)); | ||
| 540 | #endif | ||
| 541 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | else if (isascii) { |
| 542 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscViewerGetFormat(viewer,&format)); |
| 543 |
2/3✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
|
30 | switch (format) { |
| 544 | 20 | case PETSC_VIEWER_DEFAULT: | |
| 545 | case PETSC_VIEWER_ASCII_INFO: | ||
| 546 | case PETSC_VIEWER_ASCII_INFO_DETAIL: | ||
| 547 |
4/6✓ Branch 0 taken 2 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(SVDValuesView_ASCII(svd,viewer)); |
| 548 | break; | ||
| 549 | 10 | case PETSC_VIEWER_ASCII_MATLAB: | |
| 550 |
4/6✓ Branch 0 taken 2 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(SVDValuesView_MATLAB(svd,viewer)); |
| 551 | break; | ||
| 552 | ✗ | default: | |
| 553 | ✗ | PetscCall(PetscInfo(svd,"Unsupported viewer format %s\n",PetscViewerFormats[format])); | |
| 554 | } | ||
| 555 | } | ||
| 556 |
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); |
| 557 | } | ||
| 558 | |||
| 559 | /*@ | ||
| 560 | SVDValuesViewFromOptions - Processes command line options to determine if/how | ||
| 561 | the computed singular values are to be viewed. | ||
| 562 | |||
| 563 | Collective | ||
| 564 | |||
| 565 | Input Parameter: | ||
| 566 | . svd - the singular value solver context | ||
| 567 | |||
| 568 | Level: developer | ||
| 569 | |||
| 570 | .seealso: [](ch:svd), `SVDValuesView()` | ||
| 571 | @*/ | ||
| 572 | 2773 | PetscErrorCode SVDValuesViewFromOptions(SVD svd) | |
| 573 | { | ||
| 574 | 2773 | PetscViewer viewer; | |
| 575 | 2773 | PetscBool flg; | |
| 576 | 2773 | static PetscBool incall = PETSC_FALSE; | |
| 577 | 2773 | PetscViewerFormat format; | |
| 578 | |||
| 579 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2773 | PetscFunctionBegin; |
| 580 |
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.
|
2773 | if (incall) PetscFunctionReturn(PETSC_SUCCESS); |
| 581 | 2773 | incall = PETSC_TRUE; | |
| 582 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2773 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)svd),((PetscObject)svd)->options,((PetscObject)svd)->prefix,"-svd_view_values",&viewer,&format,&flg)); |
| 583 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2773 | if (flg) { |
| 584 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
56 | PetscCall(PetscViewerPushFormat(viewer,format)); |
| 585 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
56 | PetscCall(SVDValuesView(svd,viewer)); |
| 586 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
56 | PetscCall(PetscViewerPopFormat(viewer)); |
| 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.
|
56 | PetscCall(PetscViewerDestroy(&viewer)); |
| 588 | } | ||
| 589 | 2773 | incall = PETSC_FALSE; | |
| 590 |
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.
|
2773 | PetscFunctionReturn(PETSC_SUCCESS); |
| 591 | } | ||
| 592 | |||
| 593 | /*@ | ||
| 594 | SVDVectorsView - Outputs computed singular vectors to a viewer. | ||
| 595 | |||
| 596 | Collective | ||
| 597 | |||
| 598 | Input Parameters: | ||
| 599 | + svd - the singular value solver context | ||
| 600 | - viewer - the viewer | ||
| 601 | |||
| 602 | Options Database Key: | ||
| 603 | . -svd_view_vectors - output singular vectors | ||
| 604 | |||
| 605 | Notes: | ||
| 606 | Right and left singular vectors are interleaved, that is, the vectors are | ||
| 607 | output in the following order\: `V0, U0, V1, U1, V2, U2, ...` | ||
| 608 | |||
| 609 | The command-line option listed above admits an optional argument | ||
| 610 | specifying the viewer type and options. For instance, use | ||
| 611 | `-svd_view_vectors binary:svecs.bin` to save the vectors in a binary file. | ||
| 612 | |||
| 613 | Level: intermediate | ||
| 614 | |||
| 615 | .seealso: [](ch:svd), `SVDSolve()`, `SVDValuesView()`, `SVDErrorView()` | ||
| 616 | @*/ | ||
| 617 | 10 | PetscErrorCode SVDVectorsView(SVD svd,PetscViewer viewer) | |
| 618 | { | ||
| 619 | 10 | PetscInt i,k; | |
| 620 | 10 | Vec x; | |
| 621 | 10 | char vname[30]; | |
| 622 | 10 | const char *ename; | |
| 623 | |||
| 624 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 625 |
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(svd,SVD_CLASSID,1); |
| 626 |
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)svd),&viewer)); |
| 627 |
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); |
| 628 |
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(svd,1,viewer,2); |
| 629 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10 | SVDCheckSolved(svd,1); |
| 630 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (svd->nconv) { |
| 631 |
4/6✓ Branch 0 taken 2 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)svd,&ename)); |
| 632 |
4/6✓ Branch 0 taken 2 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(SVDComputeVectors(svd)); |
| 633 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
40 | for (i=0;i<svd->nconv;i++) { |
| 634 | 30 | k = svd->perm[i]; | |
| 635 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscSNPrintf(vname,sizeof(vname),"V%" PetscInt_FMT "_%s",i,ename)); |
| 636 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(BVGetColumn(svd->V,k,&x)); |
| 637 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscObjectSetName((PetscObject)x,vname)); |
| 638 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(VecView(x,viewer)); |
| 639 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(BVRestoreColumn(svd->V,k,&x)); |
| 640 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscSNPrintf(vname,sizeof(vname),"U%" PetscInt_FMT "_%s",i,ename)); |
| 641 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(BVGetColumn(svd->U,k,&x)); |
| 642 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscObjectSetName((PetscObject)x,vname)); |
| 643 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(VecView(x,viewer)); |
| 644 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(BVRestoreColumn(svd->U,k,&x)); |
| 645 | } | ||
| 646 | } | ||
| 647 |
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); |
| 648 | } | ||
| 649 | |||
| 650 | /*@ | ||
| 651 | SVDVectorsViewFromOptions - Processes command line options to determine if/how | ||
| 652 | the computed singular vectors are to be viewed. | ||
| 653 | |||
| 654 | Collective | ||
| 655 | |||
| 656 | Input Parameter: | ||
| 657 | . svd - the singular value solver context | ||
| 658 | |||
| 659 | Level: developer | ||
| 660 | |||
| 661 | .seealso: [](ch:svd), `SVDVectorsView()` | ||
| 662 | @*/ | ||
| 663 | 2773 | PetscErrorCode SVDVectorsViewFromOptions(SVD svd) | |
| 664 | { | ||
| 665 | 2773 | PetscViewer viewer; | |
| 666 | 2773 | PetscBool flg = PETSC_FALSE; | |
| 667 | 2773 | static PetscBool incall = PETSC_FALSE; | |
| 668 | 2773 | PetscViewerFormat format; | |
| 669 | |||
| 670 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2773 | PetscFunctionBegin; |
| 671 |
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.
|
2773 | if (incall) PetscFunctionReturn(PETSC_SUCCESS); |
| 672 | 2773 | incall = PETSC_TRUE; | |
| 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.
|
2773 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)svd),((PetscObject)svd)->options,((PetscObject)svd)->prefix,"-svd_view_vectors",&viewer,&format,&flg)); |
| 674 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2773 | if (flg) { |
| 675 |
4/6✓ Branch 0 taken 2 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)); |
| 676 |
4/6✓ Branch 0 taken 2 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(SVDVectorsView(svd,viewer)); |
| 677 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerPopFormat(viewer)); |
| 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.
|
10 | PetscCall(PetscViewerDestroy(&viewer)); |
| 679 | } | ||
| 680 | 2773 | incall = PETSC_FALSE; | |
| 681 |
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.
|
2773 | PetscFunctionReturn(PETSC_SUCCESS); |
| 682 | } | ||
| 683 |