<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Jul 7, 2015 at 2:06 AM, Jose E. Roman <span dir="ltr"><<a href="mailto:jroman@dsic.upv.es" target="_blank">jroman@dsic.upv.es</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
El 07/07/2015, a las 03:34, Matthew Knepley escribió:<br>
<br>
> On Mon, Jul 6, 2015 at 7:43 PM, Gideon Simpson <<a href="mailto:gideon.simpson@gmail.com">gideon.simpson@gmail.com</a>> wrote:<br>
> I have a nonlinear eigenvalue problem for a system of equations, of the form,<br>
><br>
> -Delta u + f(u) = E * u,<br>
><br>
> where E is my nonlinear eigenvalue parameter, and u and f are vector valued.<br>
><br>
> I thus have the following two things to contend with:<br>
><br>
> 1. E is a scalar which needs to be distributed across all the processes when the right hand side is formed<br>
><br>
> 2. I would like to be able to use a da to manage the spatial and multicomponent nature of u<br>
><br>
> Obviously the Vec that my nonlinear solver is going to search for has to store both bits of data. Is there a clever petsc way to handle this, or will I need to do all the indexing and broadcasting by hand?<br>
><br>
>> My first suggestion would be to investigate SLEPc, which does have some support for nonlinear<br>
>> eigenvalue problems. Failing that, E normally comes out of the algorithm as the result of some<br>
>> vector algebra which automatically distributes the constant (like VecDot).<br>
<br>
Nonlinear eigenvalue problems can be generally classified in two groups: those that depend nonlinearly on the eigenvalue parameter T(lambda)*x=0, and those that are nonlinear with respect to the eigenvector H(X)*X=X*Lambda. It seems that Gideon's problem belongs to the seocond type.<br>
<br>
Currently, SLEPc provides solvers for the first type only. We do not foresee to have solvers for the latter type anytime soon.<br>
<br>
I guess what Gideon needs to do is compute E from an initial guess of u, then use SNES to update u, and iterate until a self-consistent state is reached.<br></blockquote><div><br></div><div>Thanks for the clarification, Jose. I think what you could do is to use SLEPc as the subsolver for each</div><div>eigenproblem with frozen coefficients (so this would be a type of 'Picard' method according to Jed or</div><div>an Inexact Newton Method according to me) and then update using SNES, exactly as Jose says above.</div><div>Even if you do not know the actual Jacobian, you can do the obvious thing in your FormJacobian, which</div><div>is to just reassemble the matrix with the latest 'u' and you will get linear convergence if its contractive. This</div><div>also allows you to try out the nice line searches.</div><div><br></div><div> Thanks,</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">
Jose<br>
<br>
<br>
>><br>
>> Thanks,<br>
>><br>
>> Matt<br>
>><br>
> -gideon<br>
><br>
><br>
><br>
<span class="HOEnZb"><font color="#888888">><br>
> --<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>
<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">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</div>
</div></div>