From a9cbbab1f9897802c4e47824794d67ef557b575d Mon Sep 17 00:00:00 2001
From: manuelpett <manuel.petit@inria.fr>
Date: Tue, 12 Mar 2024 10:34:10 +0100
Subject: [PATCH] Update Non-linear solver in case MPI is used : avoid printing
 multiple times all the information

---
 src/bvpy/solvers/nonlinear.py | 36 +++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/src/bvpy/solvers/nonlinear.py b/src/bvpy/solvers/nonlinear.py
index 980255a..a4028bd 100644
--- a/src/bvpy/solvers/nonlinear.py
+++ b/src/bvpy/solvers/nonlinear.py
@@ -185,6 +185,8 @@ class NonLinearSolver():
             paramters_dict['linear_solver'] = self.parameters['linear_solver']
             # TODO :: Check with Flo : is this normal that the NL solver has a 'linear_solver' param ?
             paramters_dict['preconditioner'] = self.parameters['preconditioner']
+            paramters_dict['line_search'] = self.parameters['line_search']
+            paramters_dict['maximum_iterations'] = self.parameters['maximum_iterations']
             monitor = paramters_dict.pop('monitor_convergence')
             self._solver.parameters.update(paramters_dict)
             self._solver.parameters['report'] = monitor
@@ -201,26 +203,28 @@ class NonLinearSolver():
             of the performed computation.
         """
         if self._type == 'petsc':
-            logger.info(' Backend       : petsc')
-            logger.info(' Linear Solver : '
-                        + str(self._solver.parameters['linear_solver']))
-            logger.info(' Preconditioner: '
-                        + str(self._solver.parameters['preconditioner']))
-            logger.info(f" atol: {self._solver.parameters['absolute_tolerance']}")
-            logger.info(f" rtol: {self._solver.parameters['relative_tolerance']}")
-            logger.info(' Size          : '
-                        + str(self._u.function_space().dim()))
-            logger.info(' Solving NonLinearProblem ...')
+            if MPI_COMM_WORLD.Get_rank() == 0: # print only process of rank 0
+                logger.info(' Backend       : petsc')
+                logger.info(' Linear Solver : '
+                            + str(self._solver.parameters['linear_solver']))
+                logger.info(' Preconditioner: '
+                            + str(self._solver.parameters['preconditioner']))
+                logger.info(f" atol: {self._solver.parameters['absolute_tolerance']}")
+                logger.info(f" rtol: {self._solver.parameters['relative_tolerance']}")
+                logger.info(' Size          : '
+                            + str(self._u.function_space().dim()))
+                logger.info(' Solving NonLinearProblem ...')
 
             start = time.time()
             self._solver.solve(self._problem, self._u.vector())
             end = time.time()
 
-            logger.info(' ... Done ['+str(end-start)+' s]')
-
             residuals = self._snes.getConvergenceHistory()[0]
-            conv = self._snes.getConvergedReason()
-            logger.info(' Iterations    : ' + str(len(residuals)))
-            logger.info(' Resiudal      : ' + str(residuals[-1]))
 
-            return residuals
+            if MPI_COMM_WORLD.Get_rank() == 0:  # print only process of rank 0
+                logger.info(' ... Done [' + str(end - start) + ' s]')
+                conv = self._snes.getConvergedReason()
+                logger.info(' Iterations    : ' + str(len(residuals)))
+                logger.info(' Resiudal      : ' + str(residuals[-1]))
+
+            return residuals
\ No newline at end of file
-- 
GitLab