[petsc-users] Recommendations of possible preconditioner/ksp solver/snes solver for three phase flow reservoir simulator

Smith, Barry F. bsmith at mcs.anl.gov
Tue Dec 18 12:46:33 CST 2018


    Please try -pc_type asm

     Barry

    I am not sure if your code as currently written with nested matrices will handle this option correctly, but we'll see.

    -pc_type asm is our go to method when the coupling between fields is very strong. 

> On Dec 18, 2018, at 12:22 AM, Chukwudi Chukwudozie <chdozie at gmail.com> wrote:
> 
>  convergence_check.txt
> The non-convergence persists even after putting a KSP wrapper around the ILU. I have attached a file that contains output of the KSPs for the global model and that for the blocks. It shows convergence for the first two newton steps. However, for the third step with no convergence, the KSP residual norm reduces only minimally before the maximum ksp iteration steps. Hence, the nonconvergence.
> 
> 
> 
> On Mon, Dec 17, 2018 at 9:55 AM Matthew Knepley <knepley at gmail.com> wrote:
> On Sun, Dec 16, 2018 at 10:12 PM Chukwudi Chukwudozie via petsc-users <petsc-users at mcs.anl.gov> wrote:
> Barry,
> 
> Thanks for the reply. I have attached two files with the information. 
> 
> On Sat, Dec 15, 2018 at 8:58 PM Smith, Barry F. <bsmith at mcs.anl.gov> wrote:
> 
>   Chuks,
> 
> 1)   Please run a successful case with -snes_view and send the output so we can see the exact solver options being used.
> 
> 2)   Run a less successful case with -snes_monitor -ksp_monitor_true_residual -ksp_converged_reason -fieldsplit_ksp_monitor_true_residual -fieldsplit_ksp_converged reason so we can see how the linear solver (and the sub linear solves) are (not) converging.
> 
> The first thing I would do is to put Krylov wrappers around the ILU on the subblocks. ILU could be good enough
> for your simple case, but I bet the blocks are not begin accurately solved in the non-convergent case. You could
> turn on monitor for the blocks to confirm this:
> 
>   -P_fieldsplit_0_ksp_type gmres
>   -P_fieldsplit_0_ksp_monitor_true_residual
> 
>   Thanks,
> 
>      Matt
>  
> 
>     Barry
> 
> 
> > On Dec 15, 2018, at 7:54 PM, Chukwudi Chukwudozie via petsc-users <petsc-users at mcs.anl.gov> wrote:
> > 
> > Hi,
> > 
> > I am developing a fully implicit control volume finite element black oil reservoir simulator using petscdmplex and snes. So far, for 2 phase flow problems (3 by 3 block for pressure, saturation and bottomhole pressure), my simulator runs fine for small time step sizes in the order of less than 5 days. However, increasing the time step size, it doesn't converge with -3 (-5 sometimes) diverge reason. Considering that this is a fully implicit but nonlinear problem, I expect unconditional stability for reasonable time step sizes.
> > 
> >  The background DM for the 3 block problem is a composite one with the first two being DMPLES's (bag->plexScalNode for pressure and saturation) and the last one, bag->WellRedun, a redundant DM for the wellbore pressures. See below.
> > 
> >     ierr = DMRedundantCreate(PETSC_COMM_WORLD,0,bag->numWells,&bag->WellRedun);CHKERRQ(ierr);
> >     ierr = DMCompositeCreate(PETSC_COMM_WORLD,&bag->MultiPhasePacker);CHKERRQ(ierr);
> >         ierr = DMCompositeAddDM(bag->MultiPhasePacker,bag->plexScalNode);CHKERRQ(ierr);
> >         ierr = DMCompositeAddDM(bag->MultiPhasePacker,bag->plexScalNode);CHKERRQ(ierr);
> >         ierr = DMCompositeAddDM(bag->MultiPhasePacker,bag->WellRedun);CHKERRQ(ierr); 
> > 
> > I have used nested matrices as shown below. In addition, I used the fieldsplit (composite multiplicative) preconditioner with FGRES and least square for newton solver. See below.
> > 
> > ierr = MatCreateNest(PETSC_COMM_WORLD,Msize,is,Msize,is,&bK[0],K);CHKERRQ(ierr);
> > 
> > 
> >     ierr = SNESGetKSP(bag->snesP,&kspP);CHKERRQ(ierr);
> >     ierr = KSPSetTolerances(kspP,1.e-8,1.e-8,PETSC_DEFAULT,PETSC_DEFAULT);CHKERRQ(ierr);
> >     ierr = KSPSetType(kspP,KSPFGMRES);CHKERRQ(ierr);
> >     ierr = KSPSetFromOptions(kspP);CHKERRQ(ierr);
> >     ierr = KSPGetPC(kspP,&pcP);CHKERRQ(ierr);
> >     ierr = PCSetType(pcP, PCFIELDSPLIT);CHKERRQ(ierr);
> >     ierr = DMCompositeGetGlobalISs(bag->MultiPhasePacker,&is);CHKERRQ(ierr); 
> >     for(i = 0; i < Msize; i++)  ierr = PCFieldSplitSetIS(pcP,NULL,is[i]);CHKERRQ(ierr);
> >     ierr = PCFieldSplitSetType(pcP,PC_COMPOSITE_MULTIPLICATIVE);CHKERRQ(ierr);
> > 
> > Any ideas on possible precoditioner options/solver options/combinations to improve stability will be appreciated.
> > 
> > Chuks
> > 
> 
> 
> 
> -- 
> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
> -- Norbert Wiener
> 
> https://www.cse.buffalo.edu/~knepley/



More information about the petsc-users mailing list