# Using a fast solver to speed up the simulation in AceFEM

My question this time is more general and I would like to know if you have some suggestions.

I am going to simulate a very big 3D problem in AceFEM (109368 elements, 1419432 nodes, and 3594150 equations). I am interested in some small details that can be only captured only in very fine mesh, therefore, I cannot make the mesh coarser.

If I use the direct solver, i.e. without any special command in SMTAnalysis[], I would get 2 minutes and 30 seconds for each iteration, no matter in elasticity or plasticity. So I changed the solver to direct solver with iterative cgs solver with LU preconditioner, i.e. SMTAnalysis["Solver" -> {5, 11, {{4, 41}}}]. It actually speeded up the simulation in the elastic branch a lot but in the plastic branch, when my Lagrange multipliers are activated, it takes at least 8 minutes for each iteration. As a result, it cannot ameliorate the speed of the analysis.

I was wondering if you have any suggestions for improving the computational speed of the analysis? P.S. The direct solver without any special treatment will take at least 10 days to finish the simulation.

This is more of an extended comment since it is difficulty to answer definitely without checking the details of the particular problem. The following is a list of my ideas what you could do to better understand and improve computational performance of your analysis.

• Prepare a smaller version of your problem, maybe with just a few time steps that you can run over and over without loosing your patience.

• At the end of analysis print (and save) the output of SMTSimulationReport[]. How much time is spent in assembly (K&R time) and how much time is spent solving linear system? You mention that time of an iteration increases when material goes to plastic state and I think (!) this is due to longer assembly operation. I am not sure how much would changing the linear solver type help with this.

• Read the AceFEM documentation on solvers thoroughly and compare results of your test example with different combinations of iterative solvers and preconditioners.

• Add logging of analysis (SMTAnalysis["Output"->"logFile.out"]) and inspect the file if you see anything unusual. There you could probably see the difference in iterations when material is in plastic or elastic state.

• If you are sure that you cannot shrink you case in terms of DOF, could you do something with the number of time/load steps? Do you have the "optimal" time step size?

Also, in case of analyses that take long time to finish (in terms of hours), I think it is essential to include regular saving checkpoints. This is done with SMTDump/SMTRestart functions.

• Thanks for your complete answer. Yes, as I mentioned I can't make it smaller or coarser since it will not give the desired results. Regarding the time step size, I have defined a wide range for it, so that everything will be managed automatically. Because if I make the steps big, it will not converge. – KratosMath May 15 '18 at 9:07
• So, you are already using adaptive step size procedure? Maybe you can play a little bit around maximum allowed step size? What is your "Step efficiency"? – Pinti May 15 '18 at 9:38
• What do you mean by "step efficiency"? You mean the regular step size that I get the convergence with? – KratosMath May 15 '18 at 9:40
• "Step efficiency" is an item in SMTSimulationReport output. It is the ratio of successful steps versus all steps (also step backward) in adaptive step procedure. Often you don't need same the step size through your analysis and you would benefit from irregular step size. See documentation about "Analysis phase". – Pinti May 15 '18 at 9:52
• by the way, my step efficiency is 66.9032 – KratosMath May 15 '18 at 11:56