diff --git a/fedic.py b/fedic.py index 62ccc3a65569e600c9cdff2236fcbf2670ab7244..f9424a5f184a5bafdb048257fa0a7c90c0e4e826 100644 --- a/fedic.py +++ b/fedic.py @@ -719,6 +719,11 @@ def fedic( mypy.print_str(" "+str(t)+" s") #mypy.print_var("dU",dU.vector().array(),tab) + dU_norm = dU.vector().norm("l2") + #mypy.print_sci("dU_norm",dU_norm,tab) + if not (numpy.isfinite(dU_norm)): + dU.vector().zero() + # relaxation if (relax_type == "constant"): if (k_iter == 0): @@ -818,19 +823,23 @@ def fedic( relax = relax_list[numpy.argmin(relax_vals)] mypy.print_sci("relax",relax,tab) + if (relax == 0.): + mypy.print_str("Warning! Optimal relaxation is null…",tab) else: assert (0), "relax_type must be \"constant\", \"aitken\" or \"gss\". Aborting." # solution update U.vector().axpy(relax, dU.vector()) U_norm = U.vector().norm("l2") + #mypy.print_sci("U_norm",U_norm,tab) if (print_iterations): #mypy.print_var("U",U.vector().array(),tab) file_pvd_frame << (U, float(k_iter+1)) # displacement error - dU_norm = abs(relax) * dU.vector().norm("l2") + dU_norm *= abs(relax) + #mypy.print_sci("dU_norm",dU_norm,tab) if (dU_norm == 0.) and (Uold_norm == 0.) and (U_norm == 0.): dU_err = 0. elif (Uold_norm == 0.):