From: Jed B. <je...@je...> - 2017-11-13 04:03:42
|
"Salazar De Troya, Miguel" <sal...@ll...> writes: > No. There does not seem to be more output. The program keeps running, but after the first time I see this error, all subsequent solves return a "nan" residual norm and the same preconditioner error pops up. Is there any way to obtain more output? This is the output in the context of the KSPSolve: > > > First solve where the preconditioner fails: > > > Residual norms for Elasticity_ solve. > 0 KSP unpreconditioned resid norm 1.421591570438e+02 true resid norm 1.421591570438e+02 ||r(i)||/||b|| 1.000000000000e+00 > Linear Elasticity_ solve did not converge due to DIVERGED_PCSETUP_FAILED iterations 0 > PCSETUP_FAILED due to FACTOR_NOERROR What code is printing this last line? The PC isn't of type Factor so I don't see why it would be printed. You could try running with -info to get more detailed information from PETSc. Or run in a debugger. The Libmesh/user code on the outside probably shouldn't naively continue after the first error. It could, for example, recompute the operators with a smaller time step and retry the solve. > Following solves (the optimization keeps running) all look like this: > > Residual norms for Elasticity_ solve. > 0 KSP unpreconditioned resid norm 1.450166975748e+02 true resid norm -nan ||r(i)||/||b|| -nan > Linear Elasticity_ solve did not converge due to DIVERGED_PCSETUP_FAILED iterations 0 > PCSETUP_FAILED due to FACTOR_NOERROR > > Any way I can catch this PCSETUP_FAILED due to FACTOR_NOERROR? > > > Miguel > > ________________________________ > From: Jed Brown <je...@je...> > Sent: Sunday, November 12, 2017 12:11:29 PM > To: Salazar De Troya, Miguel; lib...@li... > Subject: Re: [Libmesh-users] try-catch in a PETSc solve() > > "Salazar De Troya, Miguel" <sal...@ll...> writes: > >> The error is: >> >> >> Linear Elasticity_ solve did not converge due to DIVERGED_PCSETUP_FAILED iterations 0 > > This is PETSc output due to > > -Elasticity_ksp_converged_reason > > It doesn't set an error. > >> PCSETUP_FAILED due to FACTOR_NOERROR > > Is there really no other output? Always send all the output. > >> The program actually continues, Is there any way I can catch this divergence and do some operation like writing to disk? >> >> Thanks >> Miguel >> >> >> >> ________________________________ >> From: Jed Brown <je...@je...> >> Sent: Saturday, November 11, 2017 1:43:32 PM >> To: Salazar De Troya, Miguel; lib...@li... >> Subject: Re: [Libmesh-users] try-catch in a PETSc solve() >> >> What is your error message? If the error is raised in PETSc, there is >> usually a setting to make it return without raising an error (instead >> setting a "diverged" reason). >> >> "Salazar De Troya, Miguel" <sal...@ll...> writes: >> >>> Hello >>> >>> >>> I have an optimization problem for which at a certain iteration, PETSc fails to build the preconditioner. I would like to catch that error and print my EquationSystem to disk so I can rerun the PETSc solve at that optimization iteration from the start. I cannot just rerun my optimization and write to disk at the iteration I know it is going to fail. The reason is that in parallel the optimization slightly differs every time I run it so the iteration it is going to fail at keeps changing. Maybe something along this lines: >>> >>> >>> try{ >>> >>> system.solve() >>> >>> } >>> >>> catch(...){ >>> >>> EquationSystem & es = system.get_equation_systems(); >>> >>> es.write("eq_output.xdr") >>> >>> } >>> >>> >>> Thanks >>> >>> Miguel >>> ------------------------------------------------------------------------------ >>> Check out the vibrant tech community on one of the world's most >>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>> _______________________________________________ >>> Libmesh-users mailing list >>> Lib...@li... >>> https://lists.sourceforge.net/lists/listinfo/libmesh-users |