Hello,

Thanks for the detailed answer!

I've just re-run the executable taking off the -snes_mf_operator and LU 
options, but it doesn't look any better... :

Running ./example-opt -snes_type ls -snes_linesearch_type basic -ksp_rtol 1e-4
  NL step  0, |residual|_2 = 1.936492e-05
  NL step  1, |residual|_2 = 1.938856e-05
  NL step  2, |residual|_2 = 1.941222e-05
  NL step  3, |residual|_2 = 1.943592e-05
  NL step  4, |residual|_2 = 1.945964e-05

Then I stopped it because it didn't look like converging, after one hour or so.

Monitoring the linear iterations showed:

Running ./example-opt -ksp_rtol 1e-3 -ksp_monitor
 NL step  0, |residual|_2 = 1.936492e-05
    0 KSP Residual norm 7.859921803229e-07 
    1 KSP Residual norm 3.815524538428e-07 
    2 KSP Residual norm 3.364144277753e-07 
    3 KSP Residual norm 2.909576661282e-07 
    4 KSP Residual norm 2.772044053816e-07 
...
  1654 KSP Residual norm 8.626050416153e-10 
  1655 KSP Residual norm 8.145093822144e-10 
  1656 KSP Residual norm 6.346659238618e-10 

The same happens with the GAMG options (either -pc_gamg_type agg or 
-pc_gamg_agg_nsmooths 1, from PETSc manual). But I could still reconfigure 
PETSc and libMesh with the hypre option.

I still haven't asked my FEAP colleague about the specifications she's using, 
but she told me it takes 4 or 5 nonlinear iterations to converge, depending on 
the loading.

Thanks!
Lorenzo

On Nov 22, 2013, at 7:10 PM, Derek Gaston wrote:

> -snes_mf_operator is a PETSc option specifying that you want to do 
> preconditioned Jacobian Free Newton Krylov (JFNK).  Is the guy using FEAP 
> doing JFNK?
> 
> JFNK means that every linear iteration inside a Newton step you must 
> recompute your residual.  That means a full sweep over the mesh, 
> re-evaluating your material properties and residual statements at every 
> quadrature point to assemble a full residual vector.  This is expensive.
> 
> If you are just doing a single physics problem (and it sounds like you are) 
> and you have the ability to compute the exact Jacobian (which it sounds like 
> you do) then using -snes_mf_operator will more than likely be MUCH slower 
> than just solving using Newton's method like normal (where you assemble a 
> matrix and a RHS just _once_ per Newton step - then throw a linear solver at 
> it).
> 
> To use "regular" Newton just leave that option off.
> 
> Further, you have specified "-pc_type lu"... which is generally a bad idea 
> for performance.  With LU you are doing a direct inversion of your Jacobian 
> matrix (old-school style!) and using it as a preconditioner.  It is generally 
> much better to use an "inexact" Newton formulation where you don't perfectly 
> invert your Jacobian matrix and instead let your Krylov solver solve to some 
> (fairly loose) tolerance (ie use -ksp_rtol 1e-4 or larger) so that you are 
> not "oversolving" your linear problem inside each Newton step.
> 
> Instead of using LU I highly recommend using an algebraic multigrid 
> preconditioner for solid mechanics.  Look into using GAMG in PETSc or use 
> --download-hypre when configuring PETSc and use:  -pc_type hypre 
> -pc_hypre_type boomeramg.
> 
> 
> Basically: Your solver options are non-optimal.  Make sure you are solving 
> using _exactly_ the same solver options between libMesh and FEAP before doing 
> any comparisons.  You should probably run with -ksp_monitor to show you how 
> many linear iterations you're taking and then make sure that both your 
> libMesh and FEAP implementations are taking the same (or VERY similar) number 
> of both nonlinear _and_ linear iterations
> 
> 
> Derek
> 
> 
> 
> On Fri, Nov 22, 2013 at 10:08 AM, Lorenzo Zanon <[email protected]> 
> wrote:
> Hello,
> 
> I have an example based on miscellaneous_ex3.C, where I implemented a 
> nonlinear elastic problem with StVenant stress-strain law on a 3D domain 
> 5x1x1, blocked at x=0 and with an applied load at x=5.  The problem is, the 
> computation of the displacement (along x y and z) is really slow (hours), on 
> our cluster it goes out of CPU time already with a mesh of 64x8x1 (the 
> loading acts only on the y-direction, so no more elements are needed along 
> z). 4 or 5 Newton steps should be enough for solving the problem...
> 
> A colleague of mine implemented the same problem on the software called FEAP, 
> and it takes only a few minutes there. I think my implementation is correct 
> because the results on a very coarse mesh (10x2x1) are roughly similar to the 
> FEAP ones on a finer mesh. I don't have any problems for the 2D case also.
> 
> Is there anything I can do? I'm running in opt mode with the following 
> options concerning the Newton solver:
> 
> -snes_type ls -snes_linesearch_type basic -snes_mf_operator -pc_type lu 
> -pc_factor_nonzeros_along_diagonal
> 
> Thanks!
> Lorenzo
> ------------------------------------------------------------------------------
> Shape the Mobile Experience: Free Subscription
> Software experts and developers: Be at the forefront of tech innovation.
> Intel(R) Software Adrenaline delivers strategic insight and game-changing
> conversations that shape the rapidly evolving mobile landscape. Sign up now.
> http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
> _______________________________________________
> Libmesh-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/libmesh-users
> 

------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing 
conversations that shape the rapidly evolving mobile landscape. Sign up now. 
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to