[petsc-dev] Lagging the numerical factorization for one of the fields of fieldsplit preconditioner

Shri abhyshr at mcs.anl.gov
Mon Mar 14 18:38:50 CDT 2011



----- Original Message -----
> Shri,
> 
> In theory the flag for KSPSetOperators() (for example
> SAME_PRECONDITIONER) is propagated down through the PCFIELDSPLIT into
> the PC that is used on the A block. So in at least simple
> circumstances if you use -snes_lag_preconditioner it should "just
> work". I traced through the PCFIELDSPLIT and it does attempt to pass
> it down.
> 
> Is it not working as expected?

  Yes,-snes_lag_preconditioner works as expected i.e it either builds both or none.

> 
> Of course this means that any other part of the preconditioner are
> also not rebuilt. So I guess if you used additive or multiplicative
> fieldsplit with 2 splits it won't update a factorization of D etc.

> Do you want other things rebuilt, just not this one thing. 

Yes. This is exactly that i am looking for.

The system i'm trying to solve is of the form
0 = A*y + g(x)
0 = f(x,y)
 which has the jacobian

  | A      dg_dx |
  | df_dy  df_dx |

I'm using the schur preconditioner which needs factorization of A and (df_dx - df_dy*inv(A)*dg_dx). Since,A is constant
it needs to be factorized only once while (df_dx - df_dy*inv(A)*dg_dx) is not constant and needs to be refactorized.

> This will be
> tricky because we don't have a mechanism to pass this information down
> into PCFIELDSPLIT. Tell me exactly what you want to do that it cannot
> currently do and I'll what we can do about it.

Currently,the factorization is done for 'both or none'.I wanted the factorization to be done for 'either,both,or none'. 
I was thinking about having an option say -fieldsplit_xxx_lag_preconditioner <niterations> which 
will delay the refactorization for field xxx by niterations and if niterations
is set to -1 then it will not update the factorization.

Thanks,
Shri

> 
> Barry
> 
> 
> 
> On Mar 14, 2011, at 4:41 PM, Shri wrote:
> 
> >
> >            | A B | |dx| |fx|
> > Jacobian = =
> >            | C D | |dy| |fy|
> >
> > While solving this linear system with a fieldsplit precondioner,is
> > there a way to lag the numerical factorization of the A matrix. The
> > A matrix in my application is constant and is about 3-4 times bigger
> > than the D matrix. The log summary shows that about 90% of the time
> > is spent in the numerical factorization phase. So i would like to do
> > the numerical factorization for A matrix just once and not have it
> > factorized for all the snes iterations.
> > Speaking on the same note, should snes lag_preconditioner
> > functionality be moved to ksp or maybe a
> > -fieldsplit_xxx_lag_preconditioner option?
> >
> > Thanks,
> > Shri



More information about the petsc-dev mailing list