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

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 <[email protected]>
Sent: Sunday, November 12, 2017 12:11:29 PM
To: Salazar De Troya, Miguel; [email protected]
Subject: Re: [Libmesh-users] try-catch in a PETSc solve()

"Salazar De Troya, Miguel" <[email protected]> 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 <[email protected]>
> Sent: Saturday, November 11, 2017 1:43:32 PM
> To: Salazar De Troya, Miguel; [email protected]
> 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" <[email protected]> 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
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/libmesh-users
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to