1function [runtime, sruntime, results] = iterate(self, options)
2% [RUNTIME, SRUNTIME, RESULTS] = ITERATE()
6E = getNumberOfModels(self);
8sruntime = zeros(1,E); % solver runtimes
10% nearly identical, but parfor based
11while ~self.converged(it) && it < options.iter_max
13 line_debug('EnsembleSolver iteration %d starting (max=%d)', it, options.iter_max);
19 parfor e = self.list(it)
20 [results{it,e}, solverTime] = self.analyze(it,e);
21 sruntime(it,e) = sruntime(it,e) + solverTime;
25 line_debug(
'Analyzing ensemble model %d at iteration %d', e, it);
26 [results{it,e}, solverTime] = self.analyze(it,e);
27 sruntime(it,e) = sruntime(it,e) + solverTime;
30 self.results = results;
34 line_printf(
'\nIter %2d. ',it);
40 line_printf(
'\b Analyze time: %.3fs. Update time: %.3fs. Runtime: %.3fs. ',Tsolve(it),Tsynch(it),Ttot);
46 line_printf(
'\nSummary: Analyze avg time: %.3fs. Update avg time: %.3fs. Total runtime: %.3fs. ',mean(Tsolve),mean(Tsynch),runtime);