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 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. I am wondering what PETSC does with these during ASM/ILU preconditioning? i.e. Does it remove them from my originally specified nonzero structure? I appreciate any direction you can give me. Thanks, Travis Fisher
