On Jul 5, 2011, at 2:38 PM, Travis C. Fisher wrote:

> I am wondering if there is a "right way" to set up preconditioning for time 
> dependent nonlinear problems (using precondtioned matrix free SNES). For 
> example, I want to use implicit Runge Kutta, and freeze my preconditioner at 
> the beginning of each step. Currently how I do this is:
> 
> Problem set up:
> 1. Specify nonzero structure of precondtioner matrix.
> 2. Specify MAT_NEW_NONZERO_LOCATION_ERR and MAT_KEEP_NONZERO_PATTERN.
> 
> Beginning of a time step (1st implicit stage of RK scheme):
> 1. Use MatZeroEntries on the preconditioner

  Do not call MatZeroEntries on a freshly created matrix (that destroys the 
preallocation pattern) so skip the MatZeroEntries the first time.

> 2. Calculate and assemble preconditioning matrix
> 3. In the jacobian evaluation routine, use flag = SAME_NONZERO_PATTERN (I'd 
> like it to use the nonzero structure I've already specified)
> 
> Subsequent nonlinear solves in time step:
> 1. Use flag = SAME_PRECONDITIONER in the jacobian evaluation
> 
> In this way, I only initialize the preconditioning matrix structure once. I 
> am wondering if I have made any large mistakes here or if I am 
> misunderstanding the character of the solver?
> 
> Is there a tutorial case for this situation? I want to note that my initial 
> nonzero structure may contain entries that are zero, but may not be zero in 
> subsequent calculations.

   Just make sure you put the zeros into the matrix the first time you build it 
and PETSc will keep the space around for the later calculations. 

> I am wondering what PETSC does with these during ASM/ILU preconditioning? 
> i.e. Does it remove them from my originally specified nonzero structure?

   It does not remove zeros so long as you put them in.

   Barry

> 
> I appreciate any direction you can give me.
> 
> Thanks,
> 
> Travis Fisher

Reply via email to