<div class="gmail_quote">On Fri, Nov 4, 2011 at 03:27, Konstantinos Kontzialis <span dir="ltr">&lt;<a href="mailto:ckontzialis@lycos.com">ckontzialis@lycos.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div id=":3to">I solve the NS equations with the discontinuous galerkin method. The system&#39;s residual before going to petsc is the following:<br>
<br>
M udot+R(u) = 0                         (1)<br>
<br>
R(u) is the part of the residual coming from the spatially discretized terms. I need to say that the explicit version of my code runs very well.<br>
<br>
But, I want to implement an implicit method for time marching using first the backward euler scheme. After linearization I get the following form:<br>
<br>
M/dt u^{n+1} + dR/du (u^{n+1}-u^{n}) = M/dt u^{n} -R(u^{n})  (2)<br></div></blockquote><div><br></div><div>Why not just have your SNESFormFunction compute:</div><div><br></div><div>G(u^{n+1}) = M (u^{n+1} - u^n) / dt + R(u^{n+1}) = 0</div>
<div><br></div><div>and then J = dG/du^{n+1}?</div><div><br></div><div>An alternative which I recommend is to use TSSetIFunction() and TSSetIJacobian(). Then you can run backward Euler with -ts_type beuler, but you can also run lots of other methods, e.g. -ts_type rosw to use Rosenbrock-W methods with adaptive error control (these also tolerate approximations to the Jacobian, such as dropping the non-stiff convective terms).</div>
</div>