diff --git a/nifty/config/nifty_about.py b/nifty/config/nifty_about.py index 3e34608dbbce181c26ffef7996977b971fa5d6cd..94cbe802d5a469187316ee2d3566ce096c724358 100644 --- a/nifty/config/nifty_about.py +++ b/nifty/config/nifty_about.py @@ -23,9 +23,20 @@ from sys import stdout as so import os import inspect +import d2o +import keepers + from nifty import __version__ +MPI = d2o.config.dependency_injector[ + keepers.get_Configuration('D2O')['mpi_module']] + +comm = MPI.COMM_WORLD +size = comm.size +rank = comm.rank + + class switch(object): """ .. __ __ __ @@ -251,12 +262,12 @@ class notification(switch): i = 2 current = inspect.stack()[i][3] while current != '<module>': - result = '.' + current + result + result = '.' + current + result i += 1 current = inspect.stack()[i][3] return result[1:] - def cstring(self,subject): + def cstring(self, subject): """ Casts an object to a string and augments that with a colour code. @@ -272,10 +283,11 @@ class notification(switch): String augmented with a color code. """ - return self.ccode + str(self._get_caller()) + ':\n' + \ - str(subject) + self._code + '\n' + if rank == 0: + return self.ccode + str(self._get_caller()) + ':\n' + \ + str(subject) + self._code + '\n' - def cflush(self,subject): + def cflush(self, subject): """ Flushes an object in its colour coded sting representation to the standard output (*without* line break). @@ -291,11 +303,11 @@ class notification(switch): None """ - if(self.status): + if self.status and rank == 0: so.write(self.cstring(subject)) so.flush() - def cprint(self,subject): + def cprint(self, subject): """ Flushes an object in its colour coded sting representation to the standard output (*with* line break). @@ -311,7 +323,7 @@ class notification(switch): None """ - if(self.status): + if self.status and rank == 0: so.write(self.cstring(subject)+"\n") so.flush() diff --git a/nifty/operators/nifty_minimization.py b/nifty/operators/nifty_minimization.py index ff85e2a489b95ba5cb832881b76543b9c61dc49f..c2394f2e33c72851356d94deac419d050fdf9a99 100644 --- a/nifty/operators/nifty_minimization.py +++ b/nifty/operators/nifty_minimization.py @@ -857,7 +857,11 @@ class quasi_newton_minimizer(object): step_length = 0 for i in xrange(limii): if self.callback is not None: - self.callback(self.x, i) + try: + self.callback(self.x, f_k, i) + except StopIteration: + self.note.cprint("\nCallback function stopped minization.") + break # compute the the gradient for the current x gradient = self.fprime(self.x) diff --git a/nifty/operators/nifty_operators.py b/nifty/operators/nifty_operators.py index 273a14afd2e2842e04a6a21d375c0249878d41e0..a89e38cad4774aed7a41c069c59c1734a3a8bba4 100644 --- a/nifty/operators/nifty_operators.py +++ b/nifty/operators/nifty_operators.py @@ -3383,8 +3383,8 @@ class propagator_operator(operator): raise ValueError(about._errors.cstring( "ERROR: At least M or N must be given.")) - def _multiply(self, x, W=None, spam=None, reset=None, note=False, - x0=None, tol=1E-4, clevel=1, limii=None, **kwargs): + def _multiply(self, x, W=None, spam=None, reset=None, note=True, + x0=None, tol=1E-3, clevel=1, limii=1000, **kwargs): if W is None: W = self.S