> 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.
> 

Reply via email to