On Fri, Jan 20, 2012 at 9:21 AM, Bernardo Rocha <span dir="ltr">&lt;<a href="mailto:bernardomartinsrocha@gmail.com">bernardomartinsrocha@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I have a C++ class that solves a nonlinear problem using PETSC&#39;s KSP without using SNES. <div>Now I&#39;m trying to make use of SNES. </div><div><br></div><div>I created some functions to form the Function and Jacobian, just like the example (snes/examples/tutorials/ex1.c). I&#39;m solving a nonlinear mechanics problem. When I have some prescribed displacements (fixed dofs) I do not assemble the whole system, so when SNES starts solving the linear systems the solution vector <b>u</b> contains only some part of the displacement, the other were already imposed in my vector <b>x</b>. So I need to implement a different Update function that considers if a degree of freedom is fixed or not, in order to update <b>x </b>to continue the nonlinear iteration.</div>

<div><br></div><div>That&#39;s why I think I need to do this. Is it clear? </div></blockquote><div><br></div><div>I may not understand what you are doing, but it sounds to me like you are imposing Dirichlet conditions on the displacement. You can</div>
<div>do this two other ways:</div><div><br></div><div>  a) Eliminate those degrees of freedom from the system you give PETSc</div><div><br></div><div>or</div><div><br></div><div>  b) For fixed dofs, make that row of the Jacobian the identity, and put a zero in the residual.</div>
<div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="gmail_quote">On Fri, Jan 20, 2012 at 12:55 PM, Jed Brown <span dir="ltr">&lt;<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="gmail_quote">On Fri, Jan 20, 2012 at 08:28, Bernardo Rocha <span dir="ltr">&lt;<a href="mailto:bernardomartinsrocha@gmail.com" target="_blank">bernardomartinsrocha@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I&#39;m using SNES but I would like to update my data after each successful step computation within the nonlinear solver using a different function. I mean, after the solution of each linear system I would like to get \Delta x_k to update x_{k+1} which is stored somewhere in my application class (C++ code).</blockquote>


</div><br></div><div>Can you explain more about what you are trying to do? What you describe does not sound algorithmically correct.</div>
</blockquote></div><br></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<br>