diff --git a/burnman/optimize/nonlinear_solvers.py b/burnman/optimize/nonlinear_solvers.py index 633dfae9..fb7e36ed 100644 --- a/burnman/optimize/nonlinear_solvers.py +++ b/burnman/optimize/nonlinear_solvers.py @@ -444,12 +444,16 @@ def _lagrangian_walk_along_constraints( x_j = sol.x + lmda * dx # Check feasibility - x_j_min = sol.x + lmda_bounds_new[0] * dx - F_j_min = self.F(x_j_min) - dxbar_j_min = lu_solve(luJ, -F_j_min) - dxbar_j_min_norm = np.linalg.norm(dxbar_j_min, ord=2) - - if dxbar_j_min_norm > dx_norm or np.linalg.norm(dx, ord=2) < self.eps: + try: + x_j_min = sol.x + lmda_bounds_new[0] * dx + F_j_min = self.F(x_j_min) + dxbar_j_min = lu_solve(luJ, -F_j_min) + dxbar_j_min_norm = np.linalg.norm(dxbar_j_min, ord=2) + + if dxbar_j_min_norm > dx_norm or np.linalg.norm(dx, ord=2) < self.eps: + persistent_bound_violation = True + except Exception: + # For example, if self.F(x_j_min) fails persistent_bound_violation = True # Check newly violated inactive constraints diff --git a/examples/example_equilibrate.py b/examples/example_equilibrate.py index f96c3190..a6b31b22 100644 --- a/examples/example_equilibrate.py +++ b/examples/example_equilibrate.py @@ -240,7 +240,7 @@ # Run the equilibration pressure = 1.0e5 - temperatures = np.linspace(300.0, 601.0, 41) + temperatures = np.linspace(300.0, 601.4, 301) equality_constraints = [("P", pressure), ("T", temperatures)] sols, prm = equilibrate(composition, assemblage, equality_constraints)