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