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