[petsc-users] sees convergence with pc_fieldsplit

Barry Smith bsmith at mcs.anl.gov
Thu Apr 20 14:38:06 CDT 2017


   Run with -snes_monitor also and send the output


> On Apr 20, 2017, at 2:30 PM, Manav Bhatia <bhatiamanav at gmail.com> wrote:
> 
> Hi, 
> 
>    I have a time-dependent multiphysics problem that I am trying to solve using pc_fieldsplit. I have defined a nested matrix for the jacobian with the diagonal block matrices explicitly created and the off-diagonal blocks defined using shell matrices, so that the matrix vector product is defined. The nonlinear system of equations at each time-step is solved using an snes construct.
> 
>     I have been facing some convergence issues, so I have reduced the problem scope to ensure that the code converges to a single discipline solution when the off-diagonal couplings are ignored.  
> 
>     Here, I have provided a constant forcing function to discipline two, which is a linear problem, so that I expect convergence in a single iteration. 
> 
>     The linear solver, defined using pc_fieldsplit seems to be converging without problems. The nonlinear solver convergence in a single time-step with FNORM in the first time step.
> 
>     The second time-step onwards, the nonlinear solver does not converge in a single step, and is terminating due to SNORM_RELATIVE. I am not sure why this is happening. 
> 
>     What is intriguing is that the solution at the end of the n^th time-step is  n times the solution after the first time step. In other words, snes at each time-step is taking the same step as was used in the first time-step. 
> 
>      Not sure sure why this is happening.  I would appreciate any advice. 
> 
> Regards,
> Manav
> 
> Time step: 0 :  t = 0.000 
> || R ||_2 = 433013  : || R_i ||_2 = ( 2.81069e-07 , 433013 )
>     0 KSP Residual norm 1.746840810717e-02 
>     1 KSP Residual norm 5.983637077441e-12 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
> || R ||_2 = 5.07622e-07  : || R_i ||_2 = ( 5.07622e-07 , 7.12896e-11 )
> Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE iterations 1
> Time step: 1 :  t = 0.001 
> || R ||_2 = 1.73186e+06  : || R_i ||_2 = ( 5.77273e-07 , 1.73186e+06 )
>     0 KSP Residual norm 1.745842035995e-02 
>     1 KSP Residual norm 2.366595812944e-12 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
> || R ||_2 = 1.29889e+06  : || R_i ||_2 = ( 9.7379e-07 , 1.29889e+06 )
> Nonlinear solve converged due to CONVERGED_SNORM_RELATIVE iterations 1
> Time step: 2 :  t = 0.002 :  xdot-L2 = 2.72522e-06
> || R ||_2 = 433159  : || R_i ||_2 = ( 1.35694e-06 , 433159 )
>     0 KSP Residual norm 1.744848431182e-02 
>     1 KSP Residual norm 7.650255893811e-12 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
> || R ||_2 = 866074  : || R_i ||_2 = ( 8.42454e-07 , 866074 )
> Nonlinear solve converged due to CONVERGED_SNORM_RELATIVE iterations 1
> Time step: 3 :  t = 0.003
> || R ||_2 = 2.59764e+06  : || R_i ||_2 = ( 1.12168e-06 , 2.59764e+06 )
>     0 KSP Residual norm 1.743859969865e-02 
>     1 KSP Residual norm 1.045225058356e-11 
>   Linear solve converged due to CONVERGED_RTOL iterations 1
> || R ||_2 = 2.16477e+06  : || R_i ||_2 = ( 9.73157e-07 , 2.16477e+06 )
> Nonlinear solve converged due to CONVERGED_SNORM_RELATIVE iterations 1
> 
> 
> Following is the output of snesview: 
> SNES Object: 1 MPI processes
>   type: newtonls
>   maximum iterations=50, maximum function evaluations=10000
>   tolerances: relative=1e-08, absolute=1e-50, solution=1e-08
>   total number of linear solver iterations=1
>   total number of function evaluations=2
>   norm schedule ALWAYS
>   SNESLineSearch Object:   1 MPI processes
>     type: basic
>     maxstep=1.000000e+08, minlambda=1.000000e-12
>     tolerances: relative=1.000000e-08, absolute=1.000000e-15, lambda=1.000000e-08
>     maximum iterations=1
>   KSP Object:   1 MPI processes
>     type: gmres
>       GMRES: restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
>       GMRES: happy breakdown tolerance 1e-30
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>     left preconditioning
>     using PRECONDITIONED norm type for convergence test
>   PC Object:   1 MPI processes
>     type: fieldsplit
>       FieldSplit with SYMMETRIC_MULTIPLICATIVE composition: total splits = 2
>       Solver info for each split is in the following KSP objects:
>       Split number 0 Defined by IS
>       KSP Object:      (fieldsplit_0_)       1 MPI processes
>         type: preonly
>         maximum iterations=10000, initial guess is zero
>         tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>         left preconditioning
>         using NONE norm type for convergence test
>       PC Object:      (fieldsplit_0_)       1 MPI processes
>         type: ilu
>           ILU: out-of-place factorization
>           0 levels of fill
>           tolerance for zero pivot 2.22045e-14
>           matrix ordering: natural
>           factor fill ratio given 1., needed 1.
>             Factored matrix follows:
>               Mat Object:               1 MPI processes
>                 type: seqaij
>                 rows=108, cols=108
>                 package used to perform factorization: petsc
>                 total: nonzeros=2800, allocated nonzeros=2800
>                 total number of mallocs used during MatSetValues calls =0
>                   using I-node routines: found 27 nodes, limit used is 5
>         linear system matrix = precond matrix:
>         Mat Object:        (fieldsplit_0_)         1 MPI processes
>           type: seqaij
>           rows=108, cols=108
>           total: nonzeros=2800, allocated nonzeros=2800
>           total number of mallocs used during MatSetValues calls =0
>             using I-node routines: found 27 nodes, limit used is 5
>       Split number 1 Defined by IS
>       KSP Object:      (fieldsplit_1_)       1 MPI processes
>         type: preonly
>         maximum iterations=10000, initial guess is zero
>         tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>         left preconditioning
>         using NONE norm type for convergence test
>       PC Object:      (fieldsplit_1_)       1 MPI processes
>         type: lu
>           LU: out-of-place factorization
>           tolerance for zero pivot 2.22045e-14
>           matrix ordering: nd
>           factor fill ratio given 5., needed 1.15385
>             Factored matrix follows:
>               Mat Object:               1 MPI processes
>                 type: seqaij
>                 rows=30, cols=30
>                 package used to perform factorization: petsc
>                 total: nonzeros=540, allocated nonzeros=540
>                 total number of mallocs used during MatSetValues calls =0
>                   using I-node routines: found 9 nodes, limit used is 5
>         linear system matrix = precond matrix:
>         Mat Object:        (fieldsplit_1_)         1 MPI processes
>           type: seqaij
>           rows=30, cols=30
>           total: nonzeros=468, allocated nonzeros=468
>           total number of mallocs used during MatSetValues calls =0
>             using I-node routines: found 10 nodes, limit used is 5
>     linear system matrix = precond matrix:
>     Mat Object:     1 MPI processes
>       type: nest
>       rows=138, cols=138
>         Matrix object: 
>           type=nest, rows=2, cols=2 
>           MatNest structure: 
>           (0,0) : prefix="fieldsplit_0_", type=seqaij, rows=108, cols=108 
>           (0,1) : type=shell, rows=108, cols=30 
>           (1,0) : type=shell, rows=30, cols=108 
>           (1,1) : prefix="fieldsplit_1_", type=seqaij, rows=30, cols=30 
> 
> 



More information about the petsc-users mailing list