Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
3 | SLEPc - Scalable Library for Eigenvalue Problem Computations | ||
4 | Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain | ||
5 | |||
6 | This file is part of SLEPc. | ||
7 | SLEPc is distributed under a 2-clause BSD license (see LICENSE). | ||
8 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
9 | */ | ||
10 | /* | ||
11 | EPS routines related to monitors | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/epsimpl.h> /*I "slepceps.h" I*/ | ||
15 | #include <petscdraw.h> | ||
16 | |||
17 | /* | ||
18 | Runs the user provided monitor routines, if any. | ||
19 | */ | ||
20 | 450733 | PetscErrorCode EPSMonitor(EPS eps,PetscInt it,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest) | |
21 | { | ||
22 | 450733 | PetscInt i,n = eps->numbermonitors; | |
23 | |||
24 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
450733 | PetscFunctionBegin; |
25 |
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.
|
476869 | for (i=0;i<n;i++) PetscCall((*eps->monitor[i])(eps,it,nconv,eigr,eigi,errest,nest,eps->monitorcontext[i])); |
26 |
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.
|
90130 | PetscFunctionReturn(PETSC_SUCCESS); |
27 | } | ||
28 | |||
29 | /*@C | ||
30 | EPSMonitorSet - Sets an ADDITIONAL function to be called at every | ||
31 | iteration to monitor the error estimates for each requested eigenpair. | ||
32 | |||
33 | Logically Collective | ||
34 | |||
35 | Input Parameters: | ||
36 | + eps - eigensolver context obtained from EPSCreate() | ||
37 | . monitor - pointer to function (if this is NULL, it turns off monitoring), see EPSMonitorFn | ||
38 | . mctx - [optional] context for private data for the | ||
39 | monitor routine (use NULL if no context is desired) | ||
40 | - monitordestroy - [optional] routine that frees monitor context (may be NULL), | ||
41 | see PetscCtxDestroyFn for the calling sequence | ||
42 | |||
43 | Options Database Keys: | ||
44 | + -eps_monitor - print only the first error estimate | ||
45 | . -eps_monitor_all - print error estimates at each iteration | ||
46 | . -eps_monitor_conv - print the eigenvalue approximations only when | ||
47 | convergence has been reached | ||
48 | . -eps_monitor draw::draw_lg - sets line graph monitor for the first unconverged | ||
49 | approximate eigenvalue | ||
50 | . -eps_monitor_all draw::draw_lg - sets line graph monitor for all unconverged | ||
51 | approximate eigenvalues | ||
52 | . -eps_monitor_conv draw::draw_lg - sets line graph monitor for convergence history | ||
53 | - -eps_monitor_cancel - cancels all monitors that have been hardwired into | ||
54 | a code by calls to EPSMonitorSet(), but does not cancel those set via | ||
55 | the options database. | ||
56 | |||
57 | Notes: | ||
58 | The options database option -eps_monitor and related options are the easiest way | ||
59 | to turn on EPS iteration monitoring. | ||
60 | |||
61 | EPSMonitorRegister() provides a way to associate an options database key with EPS | ||
62 | monitor function. | ||
63 | |||
64 | Several different monitoring routines may be set by calling EPSMonitorSet() multiple | ||
65 | times; all will be called in the order in which they were set. | ||
66 | |||
67 | Level: intermediate | ||
68 | |||
69 | .seealso: EPSMonitorFirst(), EPSMonitorAll(), EPSMonitorCancel() | ||
70 | @*/ | ||
71 | 1317 | PetscErrorCode EPSMonitorSet(EPS eps,EPSMonitorFn *monitor,void *mctx,PetscCtxDestroyFn *monitordestroy) | |
72 | { | ||
73 | 1317 | PetscInt i; | |
74 | 1317 | PetscBool identical; | |
75 | |||
76 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1317 | PetscFunctionBegin; |
77 |
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.
|
1317 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
78 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1341 | for (i=0;i<eps->numbermonitors;i++) { |
79 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
24 | PetscCall(PetscMonitorCompare((PetscErrorCode(*)(void))(PetscVoidFn*)monitor,mctx,monitordestroy,(PetscErrorCode (*)(void))(PetscVoidFn*)eps->monitor[i],eps->monitorcontext[i],eps->monitordestroy[i],&identical)); |
80 |
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.
|
24 | if (identical) PetscFunctionReturn(PETSC_SUCCESS); |
81 | } | ||
82 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1317 | PetscCheck(eps->numbermonitors<MAXEPSMONITORS,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Too many EPS monitors set"); |
83 | 1317 | eps->monitor[eps->numbermonitors] = monitor; | |
84 | 1317 | eps->monitorcontext[eps->numbermonitors] = mctx; | |
85 | 1317 | eps->monitordestroy[eps->numbermonitors++] = monitordestroy; | |
86 |
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.
|
1317 | PetscFunctionReturn(PETSC_SUCCESS); |
87 | } | ||
88 | |||
89 | /*@ | ||
90 | EPSMonitorCancel - Clears all monitors for an EPS object. | ||
91 | |||
92 | Logically Collective | ||
93 | |||
94 | Input Parameters: | ||
95 | . eps - eigensolver context obtained from EPSCreate() | ||
96 | |||
97 | Options Database Key: | ||
98 | . -eps_monitor_cancel - Cancels all monitors that have been hardwired | ||
99 | into a code by calls to EPSMonitorSet(), | ||
100 | but does not cancel those set via the options database. | ||
101 | |||
102 | Level: intermediate | ||
103 | |||
104 | .seealso: EPSMonitorSet() | ||
105 | @*/ | ||
106 | 6960 | PetscErrorCode EPSMonitorCancel(EPS eps) | |
107 | { | ||
108 | 6960 | PetscInt i; | |
109 | |||
110 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
6960 | PetscFunctionBegin; |
111 |
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.
|
6960 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
112 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
8277 | for (i=0; i<eps->numbermonitors; i++) { |
113 |
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.
|
1317 | if (eps->monitordestroy[i]) PetscCall((*eps->monitordestroy[i])(&eps->monitorcontext[i])); |
114 | } | ||
115 | 6960 | eps->numbermonitors = 0; | |
116 |
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.
|
6960 | PetscFunctionReturn(PETSC_SUCCESS); |
117 | } | ||
118 | |||
119 | /*@C | ||
120 | EPSGetMonitorContext - Gets the monitor context, as set by | ||
121 | EPSMonitorSet() for the FIRST monitor only. | ||
122 | |||
123 | Not Collective | ||
124 | |||
125 | Input Parameter: | ||
126 | . eps - eigensolver context obtained from EPSCreate() | ||
127 | |||
128 | Output Parameter: | ||
129 | . ctx - monitor context | ||
130 | |||
131 | Level: intermediate | ||
132 | |||
133 | .seealso: EPSMonitorSet() | ||
134 | @*/ | ||
135 | ✗ | PetscErrorCode EPSGetMonitorContext(EPS eps,void *ctx) | |
136 | { | ||
137 | ✗ | PetscFunctionBegin; | |
138 | ✗ | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); | |
139 | ✗ | *(void**)ctx = eps->monitorcontext[0]; | |
140 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
141 | } | ||
142 | |||
143 | 240 | static inline PetscErrorCode EPSMonitorPrintEval(EPS eps,PetscViewer viewer,PetscScalar er,PetscScalar ei) | |
144 | { | ||
145 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
240 | PetscFunctionBegin; |
146 |
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.
|
240 | if (eps->problem_type==EPS_HEP || eps->problem_type==EPS_GHEP || eps->problem_type==EPS_BSE) PetscCall(PetscViewerASCIIPrintf(viewer," %g",(double)PetscRealPart(er))); |
147 | else { | ||
148 | #if defined(PETSC_USE_COMPLEX) | ||
149 |
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.
|
130 | PetscCall(PetscViewerASCIIPrintf(viewer," %g%+gi",(double)PetscRealPart(er),(double)PetscImaginaryPart(er))); |
150 | #else | ||
151 |
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.
|
110 | PetscCall(PetscViewerASCIIPrintf(viewer," %g",(double)er)); |
152 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 5 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.
|
110 | if (ei!=0.0) PetscCall(PetscViewerASCIIPrintf(viewer,"%+gi",(double)ei)); |
153 | #endif | ||
154 | } | ||
155 |
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.
|
48 | PetscFunctionReturn(PETSC_SUCCESS); |
156 | } | ||
157 | |||
158 | /*@C | ||
159 | EPSMonitorFirst - Print the first unconverged approximate value and | ||
160 | error estimate at each iteration of the eigensolver. | ||
161 | |||
162 | Collective | ||
163 | |||
164 | Input Parameters: | ||
165 | + eps - eigensolver context | ||
166 | . its - iteration number | ||
167 | . nconv - number of converged eigenpairs so far | ||
168 | . eigr - real part of the eigenvalues | ||
169 | . eigi - imaginary part of the eigenvalues | ||
170 | . errest - error estimates | ||
171 | . nest - number of error estimates to display | ||
172 | - vf - viewer and format for monitoring | ||
173 | |||
174 | Options Database Key: | ||
175 | . -eps_monitor - activates EPSMonitorFirst() | ||
176 | |||
177 | Level: intermediate | ||
178 | |||
179 | .seealso: EPSMonitorSet(), EPSMonitorAll(), EPSMonitorConverged() | ||
180 | @*/ | ||
181 | 20 | PetscErrorCode EPSMonitorFirst(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,PetscViewerAndFormat *vf) | |
182 | { | ||
183 | 20 | PetscScalar er,ei; | |
184 | 20 | PetscViewer viewer = vf->viewer; | |
185 | |||
186 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
187 |
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.
|
20 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
188 |
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.
|
20 | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,8); |
189 |
3/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
20 | if (its==1 && ((PetscObject)eps)->prefix) PetscCall(PetscViewerASCIIPrintf(viewer," Eigenvalue approximations and residual norms for %s solve.\n",((PetscObject)eps)->prefix)); |
190 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | if (nconv<nest) { |
191 |
4/6✓ Branch 0 taken 2 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,vf->format)); |
192 |
4/6✓ Branch 0 taken 2 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(PetscViewerASCIIAddTab(viewer,((PetscObject)eps)->tablevel)); |
193 |
4/6✓ Branch 0 taken 2 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,"%3" PetscInt_FMT " EPS nconv=%" PetscInt_FMT " first unconverged value (error)",its,nconv)); |
194 |
4/6✓ Branch 0 taken 2 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(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE)); |
195 | 20 | er = eigr[nconv]; ei = eigi[nconv]; | |
196 |
4/6✓ Branch 0 taken 2 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(STBackTransform(eps->st,1,&er,&ei)); |
197 |
4/6✓ Branch 0 taken 2 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(EPSMonitorPrintEval(eps,viewer,er,ei)); |
198 |
4/6✓ Branch 0 taken 2 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," (%10.8e)\n",(double)errest[nconv])); |
199 |
4/6✓ Branch 0 taken 2 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(PetscViewerASCIIUseTabs(viewer,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.
|
20 | PetscCall(PetscViewerASCIISubtractTab(viewer,((PetscObject)eps)->tablevel)); |
201 |
4/6✓ Branch 0 taken 2 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)); |
202 | } | ||
203 |
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); |
204 | } | ||
205 | |||
206 | /*@C | ||
207 | EPSMonitorAll - Print the current approximate values and | ||
208 | error estimates at each iteration of the eigensolver. | ||
209 | |||
210 | Collective | ||
211 | |||
212 | Input Parameters: | ||
213 | + eps - eigensolver context | ||
214 | . its - iteration number | ||
215 | . nconv - number of converged eigenpairs so far | ||
216 | . eigr - real part of the eigenvalues | ||
217 | . eigi - imaginary part of the eigenvalues | ||
218 | . errest - error estimates | ||
219 | . nest - number of error estimates to display | ||
220 | - vf - viewer and format for monitoring | ||
221 | |||
222 | Options Database Key: | ||
223 | . -eps_monitor_all - activates EPSMonitorAll() | ||
224 | |||
225 | Level: intermediate | ||
226 | |||
227 | .seealso: EPSMonitorSet(), EPSMonitorFirst(), EPSMonitorConverged() | ||
228 | @*/ | ||
229 | 110 | PetscErrorCode EPSMonitorAll(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,PetscViewerAndFormat *vf) | |
230 | { | ||
231 | 110 | PetscInt i; | |
232 | 110 | PetscScalar er,ei; | |
233 | 110 | PetscViewer viewer = vf->viewer; | |
234 | |||
235 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
110 | PetscFunctionBegin; |
236 |
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.
|
110 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
237 |
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.
|
110 | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,8); |
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.
|
110 | PetscCall(PetscViewerPushFormat(viewer,vf->format)); |
239 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
110 | PetscCall(PetscViewerASCIIAddTab(viewer,((PetscObject)eps)->tablevel)); |
240 |
3/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
110 | if (its==1 && ((PetscObject)eps)->prefix) PetscCall(PetscViewerASCIIPrintf(viewer," Eigenvalue approximations and residual norms for %s solve.\n",((PetscObject)eps)->prefix)); |
241 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
110 | PetscCall(PetscViewerASCIIPrintf(viewer,"%3" PetscInt_FMT " EPS nconv=%" PetscInt_FMT " Values (Errors)",its,nconv)); |
242 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
110 | PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE)); |
243 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
270 | for (i=0;i<nest;i++) { |
244 | 160 | er = eigr[i]; ei = eigi[i]; | |
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.
|
160 | PetscCall(STBackTransform(eps->st,1,&er,&ei)); |
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.
|
160 | PetscCall(EPSMonitorPrintEval(eps,viewer,er,ei)); |
247 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
160 | PetscCall(PetscViewerASCIIPrintf(viewer," (%10.8e)",(double)errest[i])); |
248 | } | ||
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.
|
110 | PetscCall(PetscViewerASCIIPrintf(viewer,"\n")); |
250 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
110 | PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_TRUE)); |
251 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
110 | PetscCall(PetscViewerASCIISubtractTab(viewer,((PetscObject)eps)->tablevel)); |
252 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
110 | PetscCall(PetscViewerPopFormat(viewer)); |
253 |
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.
|
22 | PetscFunctionReturn(PETSC_SUCCESS); |
254 | } | ||
255 | |||
256 | /*@C | ||
257 | EPSMonitorConverged - Print the approximate values and | ||
258 | error estimates as they converge. | ||
259 | |||
260 | Collective | ||
261 | |||
262 | Input Parameters: | ||
263 | + eps - eigensolver context | ||
264 | . its - iteration number | ||
265 | . nconv - number of converged eigenpairs so far | ||
266 | . eigr - real part of the eigenvalues | ||
267 | . eigi - imaginary part of the eigenvalues | ||
268 | . errest - error estimates | ||
269 | . nest - number of error estimates to display | ||
270 | - vf - viewer and format for monitoring | ||
271 | |||
272 | Options Database Key: | ||
273 | . -eps_monitor_conv - activates EPSMonitorConverged() | ||
274 | |||
275 | Level: intermediate | ||
276 | |||
277 | .seealso: EPSMonitorSet(), EPSMonitorFirst(), EPSMonitorAll() | ||
278 | @*/ | ||
279 | 10 | PetscErrorCode EPSMonitorConverged(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,PetscViewerAndFormat *vf) | |
280 | { | ||
281 | 10 | PetscInt i; | |
282 | 10 | PetscScalar er,ei; | |
283 | 10 | PetscViewer viewer = vf->viewer; | |
284 | 10 | SlepcConvMon ctx; | |
285 | |||
286 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
287 |
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(eps,EPS_CLASSID,1); |
288 |
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,8); |
289 | 10 | ctx = (SlepcConvMon)vf->data; | |
290 |
2/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
10 | if (its==1 && ((PetscObject)eps)->prefix) PetscCall(PetscViewerASCIIPrintf(viewer," Convergence history for %s solve.\n",((PetscObject)eps)->prefix)); |
291 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | if (its==1) ctx->oldnconv = 0; |
292 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (ctx->oldnconv!=nconv) { |
293 |
4/6✓ Branch 0 taken 2 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,vf->format)); |
294 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerASCIIAddTab(viewer,((PetscObject)eps)->tablevel)); |
295 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
70 | for (i=ctx->oldnconv;i<nconv;i++) { |
296 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
60 | PetscCall(PetscViewerASCIIPrintf(viewer,"%3" PetscInt_FMT " EPS converged value (error) #%" PetscInt_FMT,its,i)); |
297 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
60 | PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_FALSE)); |
298 | 60 | er = eigr[i]; ei = eigi[i]; | |
299 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
60 | PetscCall(STBackTransform(eps->st,1,&er,&ei)); |
300 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
60 | PetscCall(EPSMonitorPrintEval(eps,viewer,er,ei)); |
301 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
60 | PetscCall(PetscViewerASCIIPrintf(viewer," (%10.8e)\n",(double)errest[i])); |
302 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
60 | PetscCall(PetscViewerASCIIUseTabs(viewer,PETSC_TRUE)); |
303 | } | ||
304 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerASCIISubtractTab(viewer,((PetscObject)eps)->tablevel)); |
305 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerPopFormat(viewer)); |
306 | 10 | ctx->oldnconv = nconv; | |
307 | } | ||
308 |
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); |
309 | } | ||
310 | |||
311 | 16 | PetscErrorCode EPSMonitorConvergedCreate(PetscViewer viewer,PetscViewerFormat format,void *ctx,PetscViewerAndFormat **vf) | |
312 | { | ||
313 | 16 | SlepcConvMon mctx; | |
314 | |||
315 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
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.
|
16 | PetscCall(PetscViewerAndFormatCreate(viewer,format,vf)); |
317 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16 | PetscCall(PetscNew(&mctx)); |
318 | 16 | mctx->ctx = ctx; | |
319 | 16 | (*vf)->data = (void*)mctx; | |
320 |
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.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
321 | } | ||
322 | |||
323 | 16 | PetscErrorCode EPSMonitorConvergedDestroy(PetscViewerAndFormat **vf) | |
324 | { | ||
325 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
326 |
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.
|
16 | if (!*vf) PetscFunctionReturn(PETSC_SUCCESS); |
327 |
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.
|
16 | PetscCall(PetscFree((*vf)->data)); |
328 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16 | PetscCall(PetscViewerDestroy(&(*vf)->viewer)); |
329 |
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.
|
16 | PetscCall(PetscFree(*vf)); |
330 |
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); |
331 | } | ||
332 | |||
333 | /*@C | ||
334 | EPSMonitorFirstDrawLG - Plots the error estimate of the first unconverged | ||
335 | approximation at each iteration of the eigensolver. | ||
336 | |||
337 | Collective | ||
338 | |||
339 | Input Parameters: | ||
340 | + eps - eigensolver context | ||
341 | . its - iteration number | ||
342 | . nconv - number of converged eigenpairs so far | ||
343 | . eigr - real part of the eigenvalues | ||
344 | . eigi - imaginary part of the eigenvalues | ||
345 | . errest - error estimates | ||
346 | . nest - number of error estimates to display | ||
347 | - vf - viewer and format for monitoring | ||
348 | |||
349 | Options Database Key: | ||
350 | . -eps_monitor draw::draw_lg - activates EPSMonitorFirstDrawLG() | ||
351 | |||
352 | Level: intermediate | ||
353 | |||
354 | .seealso: EPSMonitorSet() | ||
355 | @*/ | ||
356 | 344 | PetscErrorCode EPSMonitorFirstDrawLG(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,PetscViewerAndFormat *vf) | |
357 | { | ||
358 | 344 | PetscViewer viewer = vf->viewer; | |
359 | 344 | PetscDrawLG lg; | |
360 | 344 | PetscReal x,y; | |
361 | |||
362 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
344 | PetscFunctionBegin; |
363 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 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.
|
344 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
364 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 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.
|
344 | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,8); |
365 |
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.
|
344 | PetscCall(PetscViewerPushFormat(viewer,vf->format)); |
366 |
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.
|
344 | PetscCall(PetscViewerDrawGetDrawLG(viewer,0,&lg)); |
367 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
344 | if (its==1) { |
368 |
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(PetscDrawLGReset(lg)); |
369 |
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(PetscDrawLGSetDimension(lg,1)); |
370 |
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(PetscDrawLGSetLimits(lg,1,1,PetscLog10Real(eps->tol)-2,0.0)); |
371 | } | ||
372 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
344 | if (nconv<nest) { |
373 | 344 | x = (PetscReal)its; | |
374 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
344 | if (errest[nconv] > 0.0) y = PetscLog10Real(errest[nconv]); |
375 | ✗ | else y = 0.0; | |
376 |
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.
|
344 | PetscCall(PetscDrawLGAddPoint(lg,&x,&y)); |
377 |
6/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 8 times.
|
344 | if (its <= 20 || !(its % 5) || eps->reason) { |
378 |
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.
|
216 | PetscCall(PetscDrawLGDraw(lg)); |
379 |
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.
|
216 | PetscCall(PetscDrawLGSave(lg)); |
380 | } | ||
381 | } | ||
382 |
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.
|
344 | PetscCall(PetscViewerPopFormat(viewer)); |
383 |
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.
|
43 | PetscFunctionReturn(PETSC_SUCCESS); |
384 | } | ||
385 | |||
386 | /*@C | ||
387 | EPSMonitorFirstDrawLGCreate - Creates the plotter for the first error estimate. | ||
388 | |||
389 | Collective | ||
390 | |||
391 | Input Parameters: | ||
392 | + viewer - the viewer | ||
393 | . format - the viewer format | ||
394 | - ctx - an optional user context | ||
395 | |||
396 | Output Parameter: | ||
397 | . vf - the viewer and format context | ||
398 | |||
399 | Level: intermediate | ||
400 | |||
401 | .seealso: EPSMonitorSet() | ||
402 | @*/ | ||
403 | 16 | PetscErrorCode EPSMonitorFirstDrawLGCreate(PetscViewer viewer,PetscViewerFormat format,void *ctx,PetscViewerAndFormat **vf) | |
404 | { | ||
405 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
406 |
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(PetscViewerAndFormatCreate(viewer,format,vf)); |
407 | 16 | (*vf)->data = ctx; | |
408 |
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(PetscViewerMonitorLGSetUp(viewer,NULL,"First Error Estimate","Log Error Estimate",1,NULL,PETSC_DECIDE,PETSC_DECIDE,400,300)); |
409 |
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); |
410 | } | ||
411 | |||
412 | /*@C | ||
413 | EPSMonitorAllDrawLG - Plots the error estimate of all unconverged | ||
414 | approximations at each iteration of the eigensolver. | ||
415 | |||
416 | Collective | ||
417 | |||
418 | Input Parameters: | ||
419 | + eps - eigensolver context | ||
420 | . its - iteration number | ||
421 | . nconv - number of converged eigenpairs so far | ||
422 | . eigr - real part of the eigenvalues | ||
423 | . eigi - imaginary part of the eigenvalues | ||
424 | . errest - error estimates | ||
425 | . nest - number of error estimates to display | ||
426 | - vf - viewer and format for monitoring | ||
427 | |||
428 | Options Database Key: | ||
429 | . -eps_monitor_all draw::draw_lg - activates EPSMonitorAllDrawLG() | ||
430 | |||
431 | Level: intermediate | ||
432 | |||
433 | .seealso: EPSMonitorSet() | ||
434 | @*/ | ||
435 | 16 | PetscErrorCode EPSMonitorAllDrawLG(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,PetscViewerAndFormat *vf) | |
436 | { | ||
437 | 16 | PetscViewer viewer = vf->viewer; | |
438 | 16 | PetscDrawLG lg; | |
439 | 16 | PetscInt i,n = PetscMin(eps->nev,255); | |
440 | 16 | PetscReal *x,*y; | |
441 | |||
442 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
443 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 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.
|
16 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
444 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 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.
|
16 | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,8); |
445 |
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(PetscViewerPushFormat(viewer,vf->format)); |
446 |
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(PetscViewerDrawGetDrawLG(viewer,0,&lg)); |
447 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
16 | if (its==1) { |
448 |
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.
|
8 | PetscCall(PetscDrawLGReset(lg)); |
449 |
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.
|
8 | PetscCall(PetscDrawLGSetDimension(lg,n)); |
450 |
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.
|
8 | PetscCall(PetscDrawLGSetLimits(lg,1,1,PetscLog10Real(eps->tol)-2,0.0)); |
451 | } | ||
452 |
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(PetscMalloc2(n,&x,n,&y)); |
453 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
32 | for (i=0;i<n;i++) { |
454 | 16 | x[i] = (PetscReal)its; | |
455 |
2/4✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
16 | if (i < nest && errest[i] > 0.0) y[i] = PetscLog10Real(errest[i]); |
456 | ✗ | else y[i] = 0.0; | |
457 | } | ||
458 |
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(PetscDrawLGAddPoint(lg,x,y)); |
459 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
16 | if (its <= 20 || !(its % 5) || eps->reason) { |
460 |
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(PetscDrawLGDraw(lg)); |
461 |
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(PetscDrawLGSave(lg)); |
462 | } | ||
463 |
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(PetscFree2(x,y)); |
464 |
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(PetscViewerPopFormat(viewer)); |
465 |
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); |
466 | } | ||
467 | |||
468 | /*@C | ||
469 | EPSMonitorAllDrawLGCreate - Creates the plotter for all the error estimates. | ||
470 | |||
471 | Collective | ||
472 | |||
473 | Input Parameters: | ||
474 | + viewer - the viewer | ||
475 | . format - the viewer format | ||
476 | - ctx - an optional user context | ||
477 | |||
478 | Output Parameter: | ||
479 | . vf - the viewer and format context | ||
480 | |||
481 | Level: intermediate | ||
482 | |||
483 | .seealso: EPSMonitorSet() | ||
484 | @*/ | ||
485 | 8 | PetscErrorCode EPSMonitorAllDrawLGCreate(PetscViewer viewer,PetscViewerFormat format,void *ctx,PetscViewerAndFormat **vf) | |
486 | { | ||
487 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
8 | PetscFunctionBegin; |
488 |
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.
|
8 | PetscCall(PetscViewerAndFormatCreate(viewer,format,vf)); |
489 | 8 | (*vf)->data = ctx; | |
490 |
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.
|
8 | PetscCall(PetscViewerMonitorLGSetUp(viewer,NULL,"All Error Estimates","Log Error Estimate",1,NULL,PETSC_DECIDE,PETSC_DECIDE,400,300)); |
491 |
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.
|
1 | PetscFunctionReturn(PETSC_SUCCESS); |
492 | } | ||
493 | |||
494 | /*@C | ||
495 | EPSMonitorConvergedDrawLG - Plots the number of converged eigenvalues | ||
496 | at each iteration of the eigensolver. | ||
497 | |||
498 | Collective | ||
499 | |||
500 | Input Parameters: | ||
501 | + eps - eigensolver context | ||
502 | . its - iteration number | ||
503 | . nconv - number of converged eigenpairs so far | ||
504 | . eigr - real part of the eigenvalues | ||
505 | . eigi - imaginary part of the eigenvalues | ||
506 | . errest - error estimates | ||
507 | . nest - number of error estimates to display | ||
508 | - vf - viewer and format for monitoring | ||
509 | |||
510 | Options Database Key: | ||
511 | . -eps_monitor_conv draw::draw_lg - activates EPSMonitorConvergedDrawLG() | ||
512 | |||
513 | Level: intermediate | ||
514 | |||
515 | .seealso: EPSMonitorSet() | ||
516 | @*/ | ||
517 | ✗ | PetscErrorCode EPSMonitorConvergedDrawLG(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,PetscViewerAndFormat *vf) | |
518 | { | ||
519 | ✗ | PetscViewer viewer = vf->viewer; | |
520 | ✗ | PetscDrawLG lg; | |
521 | ✗ | PetscReal x,y; | |
522 | |||
523 | ✗ | PetscFunctionBegin; | |
524 | ✗ | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); | |
525 | ✗ | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,8); | |
526 | ✗ | PetscCall(PetscViewerPushFormat(viewer,vf->format)); | |
527 | ✗ | PetscCall(PetscViewerDrawGetDrawLG(viewer,0,&lg)); | |
528 | ✗ | if (its==1) { | |
529 | ✗ | PetscCall(PetscDrawLGReset(lg)); | |
530 | ✗ | PetscCall(PetscDrawLGSetDimension(lg,1)); | |
531 | ✗ | PetscCall(PetscDrawLGSetLimits(lg,1,1,0,eps->nev)); | |
532 | } | ||
533 | ✗ | x = (PetscReal)its; | |
534 | ✗ | y = (PetscReal)eps->nconv; | |
535 | ✗ | PetscCall(PetscDrawLGAddPoint(lg,&x,&y)); | |
536 | ✗ | if (its <= 20 || !(its % 5) || eps->reason) { | |
537 | ✗ | PetscCall(PetscDrawLGDraw(lg)); | |
538 | ✗ | PetscCall(PetscDrawLGSave(lg)); | |
539 | } | ||
540 | ✗ | PetscCall(PetscViewerPopFormat(viewer)); | |
541 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
542 | } | ||
543 | |||
544 | /*@C | ||
545 | EPSMonitorConvergedDrawLGCreate - Creates the plotter for the convergence history. | ||
546 | |||
547 | Collective | ||
548 | |||
549 | Input Parameters: | ||
550 | + viewer - the viewer | ||
551 | . format - the viewer format | ||
552 | - ctx - an optional user context | ||
553 | |||
554 | Output Parameter: | ||
555 | . vf - the viewer and format context | ||
556 | |||
557 | Level: intermediate | ||
558 | |||
559 | .seealso: EPSMonitorSet() | ||
560 | @*/ | ||
561 | ✗ | PetscErrorCode EPSMonitorConvergedDrawLGCreate(PetscViewer viewer,PetscViewerFormat format,void *ctx,PetscViewerAndFormat **vf) | |
562 | { | ||
563 | ✗ | SlepcConvMon mctx; | |
564 | |||
565 | ✗ | PetscFunctionBegin; | |
566 | ✗ | PetscCall(PetscViewerAndFormatCreate(viewer,format,vf)); | |
567 | ✗ | PetscCall(PetscNew(&mctx)); | |
568 | ✗ | mctx->ctx = ctx; | |
569 | ✗ | (*vf)->data = (void*)mctx; | |
570 | ✗ | PetscCall(PetscViewerMonitorLGSetUp(viewer,NULL,"Convergence History","Number Converged",1,NULL,PETSC_DECIDE,PETSC_DECIDE,400,300)); | |
571 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
572 | } | ||
573 |