MCPcopy Create free account
hub / github.com/NGSolve/ngsolve / CheckResidual

Method CheckResidual

python/krylovspace.py:129–218  ·  view source on GitHub ↗
(self, residual)

Source from the content-addressed store, hash-verified

127 self.pre.Update()
128
129 def CheckResidual(self, residual):
130 self.iterations += 1
131 self.residuals.append(residual)
132 if len(self.residuals) == 1:
133 if self.tol is None:
134 self._final_residual = self.atol
135 else:
136 self._final_residual = residual * self.tol
137 if self.atol is not None:
138 self._final_residual = max(self._final_residual, self.atol)
139 else:
140 if self.callback is not None:
141 self.callback(self.iterations, residual)
142 if self.callback_sol is not None:
143 self.callback_sol(self.sol)
144 if self.residuals[0] != 0:
145 logerrstop = log(self._final_residual)
146 logerrfirst = log(self.residuals[0])
147 if residual == 0:
148 _SetThreadPercentage(100)
149 else:
150 _SetThreadPercentage(100.*max(self.iterations/self.maxiter,
151 (log(residual)-logerrfirst)/(logerrstop - logerrfirst)))
152 if self.printrates:
153 print("{}{} iteration {}, residual = {} ".format(_clear_line_command, self.name, self.iterations, residual), end="\n" if isinstance(self.printrates, bool) else self.printrates)
154 if self.iterations == self.maxiter and residual > self._final_residual:
155 print("{}WARNING: {} did not converge to TOL".format(_clear_line_command, self.name))
156 is_converged = self.iterations >= self.maxiter or residual <= self._final_residual
157 if is_converged and self.printrates == "\r":
158 print("{}{} {}converged in {} iterations to residual {}".format(_clear_line_command, self.name, "NOT " if residual >= self._final_residual else "", self.iterations, residual))
159
160 # if self.plotrates:
161 if False:
162 if self.iterations==1:
163 import matplotlib.pyplot as plt
164 from IPython.display import display, clear_output
165 fig, ax = plt.subplots()
166 self.plt = plt
167 self.ax = ax
168 self.fig = fig
169 self.its = []
170 self.ress = []
171 self.clear_output=clear_output
172 self.display=display
173 plt.ioff()
174 plt.show()
175 self.its.append(self.iterations)
176 self.ress.append(residual)
177 # update_plot(plt, ax, self.its, self.ress)
178 self.ax.clear()
179 self.ax.semilogy(self.its, self.ress, label='error')
180 self.ax.set_xlabel('iteration')
181 self.ax.set_ylabel('error')
182 self.ax.set_title('CG Solver Convergence')
183 self.ax.legend()
184 self.plt.draw()
185 self.clear_output(wait=True)
186 self.display(self.fig)

Callers 6

_SolveImplMethod · 0.80
_SolveImplMethod · 0.80
_SolveImplMethod · 0.80
_SolveImplMethod · 0.80
_SolveImplMethod · 0.80
_SolveImplMethod · 0.80

Calls 1

logFunction · 0.90

Tested by

no test coverage detected