<!DOCTYPE html>
<!-- BaNnErBlUrFlE-BoDy-start -->
<!-- Preheader Text : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">
 Dear Barry, Thanks for the quick response. It indeed prints out all of my matrix values, so I need to set a threshold to get a sense of it. You are right that even I have a approximate Jacobian, the solution can converge in a quasi newton way. 
</div>
<!-- Preheader Text : END -->

<!-- Email Banner : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerStart</div>

<!--[if ((ie)|(mso))]>
  <table border="0" cellspacing="0" cellpadding="0" width="100%" style="padding: 16px 0px 16px 0px; direction: ltr" ><tr><td>
    <table border="0" cellspacing="0" cellpadding="0" style="padding: 0px 10px 5px 6px; width: 100%; border-radius:4px; border-top:4px solid #90a4ae;background-color:#D0D8DC;"><tr><td valign="top">
      <table align="left" border="0" cellspacing="0" cellpadding="0" style="padding: 4px 8px 4px 8px">
        <tr><td style="color:#000000; font-family: 'Arial', sans-serif; font-weight:bold; font-size:14px; direction: ltr">
          This Message Is From an External Sender
        </td></tr>
        <tr><td style="color:#000000; font-weight:normal; font-family: 'Arial', sans-serif; font-size:12px; direction: ltr">
          This message came from outside your organization.
        </td></tr>

      </table>

    </td></tr></table>
  </td></tr></table>
<![endif]-->

<![if !((ie)|(mso))]>
  <div dir="ltr"  id="pfptBanner6c9lcwh" style="all: revert !important; display:block !important; text-align: left !important; margin:16px 0px 16px 0px !important; padding:8px 16px 8px 16px !important; border-radius: 4px !important; min-width: 200px !important; background-color: #D0D8DC !important; background-color: #D0D8DC; border-top: 4px solid #90a4ae !important; border-top: 4px solid #90a4ae;">
    <div id="pfptBanner6c9lcwh" style="all: unset !important; float:left !important; display:block !important; margin: 0px 0px 1px 0px !important; max-width: 600px !important;">
      <div id="pfptBanner6c9lcwh" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #D0D8DC !important; color:#000000 !important; color:#000000; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-weight:bold !important; font-weight:bold; font-size:14px !important; line-height:18px !important; line-height:18px">
        This Message Is From an External Sender
      </div>
      <div id="pfptBanner6c9lcwh" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #D0D8DC !important; color:#000000 !important; color:#000000; font-weight:normal; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-size:12px !important; line-height:18px !important; line-height:18px; margin-top:2px !important;">
This message came from outside your organization.
      </div>

    </div>

    <div style="clear: both !important; display: block !important; visibility: hidden !important; line-height: 0 !important; font-size: 0.01px !important; height: 0px"> </div>
  </div>
<![endif]>

<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerEnd</div>
<!-- Email Banner : END -->

<!-- BaNnErBlUrFlE-BoDy-end -->
<html>
<head><!-- BaNnErBlUrFlE-HeAdEr-start -->
<style>
  #pfptBanner6c9lcwh { all: revert !important; display: block !important; 
    visibility: visible !important; opacity: 1 !important; 
    background-color: #D0D8DC !important; 
    max-width: none !important; max-height: none !important }
  .pfptPrimaryButton6c9lcwh:hover, .pfptPrimaryButton6c9lcwh:focus {
    background-color: #b4c1c7 !important; }
  .pfptPrimaryButton6c9lcwh:active {
    background-color: #90a4ae !important; }
</style>

<!-- BaNnErBlUrFlE-HeAdEr-end -->
<meta charset="UTF-8"></head><body><pre style="font-family: sans-serif; font-size: 100%; white-space: pre-wrap; word-wrap: break-word">Dear Barry,

Thanks for the quick response. It indeed prints out all of my matrix 
values, so I need to set a threshold to get a sense of it.

You are right that even I have a approximate Jacobian, the solution can 
converge in a quasi newton way.

Since this ratio seems to be constant, so my Jacobian might be a 
fraction of Jfd. But anyway, I need to dig deeper to find the real cause 
of this difference.

Best wishes,

Yi

On 2/24/24 19:29, Barry Smith wrote:
>
>> On Feb 24, 2024, at 10:50 AM, Yi Hu <y.hu@mpie.de> wrote:
>>
>> Dear Barry,
>>
>> Thanks for the hint.
>>
>> This works for my purpose. I did not need to access my form function value, so I did not call SNESGetFunction() in my callback function.
>>
>> Maybe another small question about Jacobian test.
>>
>> I implemented a matrix-free jacobian in my snes solver, then i ran my code with  "-snes_type newtonls -ksp_type gmres -snes_linesearch_type bt -snes_test_jacobian -snes_test_jacobian_view". It gave message like this
>>
>> ||J - Jfd||_F/||J||_F = 0.321634, ||J - Jfd||_F = 6.81067e+12
>>
>> which is much larger than the expected scale 1e-8, however the above ratio is constant and my |J-Jfd|_F is gradually changing at this scale around 6.81e+12. Is my own hand-coded matrix-free jacobian wrong?
>    Most definitely something is wrong. Doesn't -snes_test_jacobian_view cause it to print the matrix difference so you can see what entries (if not all) are wrong?
>
>    BTW: "Newton" can converge even with incorrect Jacobians so just having Newton converge does not mean that the Jacobian is correct.
>> In fact my code has a converged and reasonable result for various cases. I guess Jfd is an approximation, so I could still have a possibly correct Jacobian.
>>
>> Best wishes,
>>
>> Yi
>>
>> On 2/15/24 04:35, Barry Smith wrote:
>>>    Use SNESSetUpdate() to provide a callback function that gets called by SNES automatically immediately before each linear solve. Inside your callback use SNESGetFunction(snes,f,NULL,NULL); to access the last computed value of your function, from this you can update your global variable.
>>>
>>> Barry
>>>
>>>
>>>> On Feb 14, 2024, at 4:28 PM, Yi Hu <y.hu@mpie.de> wrote:
>>>>
>>>> Dear PETSc team,
>>>>
>>>> I am using a newtonls snes solver. I know that form residual is invoked at several locations of the algorithm, first evaluated for the rhs of ksp solver, then several times for obtaining the optimal step of line search.
>>>>
>>>> In my problem I have a global variable that is updated every time when form residual is called, which is not desired in the context of netwonls. Basically, it should be only evaluated for the purpose of rhs of ksp (and not in line search). So is it possible to know in which context my form residual is used for? Then I can just skip my line of updating global variable depending on this condition. If not possible, could you suggest a workaround? Or do I need to design a customized line search routine?
>>>>
>>>> Thanks for your help.
>>>>
>>>> Best regards,
>>>>
>>>> Yi
>>>>
>>>>
>>>>
>>>> -------------------------------------------------
>>>> Stay up to date and follow us on LinkedIn, Twitter and YouTube.
>>>>
>>>> Max-Planck-Institut für Eisenforschung GmbH
>>>> Max-Planck-Straße 1
>>>> D-40237 Düsseldorf
>>>> Handelsregister B 2533 Amtsgericht Düsseldorf
>>>> Geschäftsführung
>>>> Prof. Dr. Gerhard Dehm
>>>> Prof. Dr. Jörg Neugebauer
>>>> Prof. Dr. Dierk Raabe
>>>> Dr. Kai de Weldige
>>>> Ust.-Id.-Nr.: DE 11 93 58 514 Steuernummer: 105 5891 1000
>>>>
>>>>
>>>> Please consider that invitations and e-mails of our institute are only valid if they end with …@mpie.de. If you are not sure of the validity please contact rco@mpie.de
>>>>
>>>> Bitte beachten Sie, dass Einladungen zu Veranstaltungen und E-Mails
>>>> aus unserem Haus nur mit der Endung …@mpie.de gültig sind. In Zweifelsfällen wenden Sie sich bitte an rco@mpie.de
>>>> -------------------------------------------------
>>>>
>>
>> -------------------------------------------------
>> Stay up to date and follow us on LinkedIn, Twitter and YouTube.
>>
>> Max-Planck-Institut für Eisenforschung GmbH
>> Max-Planck-Straße 1
>> D-40237 Düsseldorf
>> Handelsregister B 2533 Amtsgericht Düsseldorf
>> Geschäftsführung
>> Prof. Dr. Gerhard Dehm
>> Prof. Dr. Jörg Neugebauer
>> Prof. Dr. Dierk Raabe
>> Dr. Kai de Weldige
>> Ust.-Id.-Nr.: DE 11 93 58 514 Steuernummer: 105 5891 1000
>>
>>
>> Please consider that invitations and e-mails of our institute are only valid if they end with …@mpie.de. If you are not sure of the validity please contact rco@mpie.de
>>
>> Bitte beachten Sie, dass Einladungen zu Veranstaltungen und E-Mails
>> aus unserem Haus nur mit der Endung …@mpie.de gültig sind. In Zweifelsfällen wenden Sie sich bitte an rco@mpie.de
>> -------------------------------------------------
>>


-------------------------------------------------
Stay up to date and follow us on LinkedIn, Twitter and YouTube.

Max-Planck-Institut für Eisenforschung GmbH
Max-Planck-Straße 1
D-40237 Düsseldorf
 
Handelsregister B 2533 
Amtsgericht Düsseldorf
 
Geschäftsführung
Prof. Dr. Gerhard Dehm
Prof. Dr. Jörg Neugebauer
Prof. Dr. Dierk Raabe
Dr. Kai de Weldige
 
Ust.-Id.-Nr.: DE 11 93 58 514 
Steuernummer: 105 5891 1000


Please consider that invitations and e-mails of our institute are 
only valid if they end with …@mpie.de. 
If you are not sure of the validity please contact rco@mpie.de

Bitte beachten Sie, dass Einladungen zu Veranstaltungen und E-Mails
aus unserem Haus nur mit der Endung …@mpie.de gültig sind. 
In Zweifelsfällen wenden Sie sich bitte an rco@mpie.de
-------------------------------------------------

</pre></body></html>