> On Aug 28, 2015, at 3:04 PM, Gideon Simpson <[email protected]> wrote:
>
> Yes, if i continue in this parameter on the coarse mesh, I can generally
> solve at all values. I do find that I need to do some amount of continuation
> to solve near the endpoint. The problem is that on the coarse mesh, things
> are not fully resolved at all the values along the continuation parameter,
> and I would like to do refinement.
>
> One subtlety is that I actually want the intermediate continuation solutions
> too. Currently, without doing any grid sequence, I compute each, write it to
> disk, and then go on to the next one. So I now need to go back an refine
> them. I was thinking that perhaps I could refine them on the fly, dump them
> to disk, and use the coarse solution as the starting guess at the next
> iteration, but that would seem to require resetting the snes back to the
> coarse grid.
>
> The alternative would be to just script the mesh refinement in a post
> processing stage, where each value of the continuation is parameter is loaded
> on the coarse mesh, and refined. Perhaps that’s the most practical thing to
> do.
I would do the following. Create your DM and create a SNES that will do the
continuation
loop over continuation parameter
SNESSolve(snes,NULL,Ucoarse);
if (you decide you want to see the refined solution at this
continuation point) {
SNESCreate(comm,&snesrefine);
SNESSetDM()
etc
SNESSetGridSequence(snesrefine,)
SNESSolve(snesrefine,0,Ucoarse);
SNESGetSolution(snesrefine,&Ufine);
VecView(Ufine or do whatever you want to do with the Ufine at that
continuation point
SNESDestroy(snesrefine);
end if
end loop over continuation parameter.
Barry
>
> -gideon
>
>> On Aug 28, 2015, at 3:55 PM, Barry Smith <[email protected]> wrote:
>>
>>>
>>>
>>> 3. This problem is actually part of a continuation problem that roughly
>>> looks like this
>>>
>>> for( continuation parameter p = 0 to 1){
>>>
>>> solve with parameter p_i using solution from p_{i-1},
>>> }
>>>
>>> What I would like to do is to start the solver, for each value of parameter
>>> p_i on the coarse mesh, and then do grid sequencing on that. But it
>>> appears that after doing grid sequencing on the initial p_0 = 0, the SNES
>>> is set to use the finer mesh.
>>
>> So you are using continuation to give you a good enough initial guess on
>> the coarse level to even get convergence on the coarse level? First I would
>> check if you even need the continuation (or can you not even solve the
>> coarse problem without it).
>>
>> If you do need the continuation then you will need to tweak how you do the
>> grid sequencing. I think this will work:
>>
>> Do not use -snes_grid_sequencing
>>
>> Run SNESSolve() as many times as you want with your continuation parameter.
>> This will all happen on the coarse mesh.
>>
>> Call SNESSetGridSequence()
>>
>> Then call SNESSolve() again and it will do one solve on the coarse level and
>> then interpolate to the next level etc.
>