From: Vetter Roman <vetterro@et...>  20111129 17:52:08

Hi folks I'm using NewmarkSystem with PetscLinearSolver to solve M*a(t) + C*v(t) + K(t)*u(t) = f(t) in each time step. M and C are fixed, and the changes in K are very small (only 03 element contributions change between consecutive time steps). So, since I'm solving this millions of times for large systems in parallel, and the performance seems to be pretty bad when compared to other FEM software solving similar problems, I'm looking for a way to speed things up. The time dependence of K (and f for that matter) is absolutely minor, so I would like to reuse as many precomputed data as possible in the linear solver. Reusing the preconditioner and the current solution seems a good start. But there is probably lots of other work that can be skipped when almost the same system is solved again. What of the following is supported by libMesh, and how can I enable it?  Reusing the same preconditioner  Starting from the solution in the previous time step instead of zeros  Reusing other data in the solver, like decomposition matrices, etc.  Avoiding making copies of matrices, vectors, and destroying them again after the solve  Further optimizations for small changes? I'm using PETSc 3.2p5 and libMesh 0.7.2 (both in optimized mode, in case turning off debug mode for better performance comes to mind). I've been looking at PetscLinearSolver::solve() a bit and some of the mentioned optimizations seem at least possible, but it's also somewhat messy to get to understand what exactly is copied where and which preconditioner is used by default etc. from the various nested function calls. I'm hoping somebody who's more experienced with the interplay between libMesh and PETSc can give me a hint. I'm not using any fancy stuff like boundary conditions, subset solving or the like, just a plain bulk with slightly evolving stiffnesses and forces, that needs to be solved many many times. Any advice is much appreciated! Roman 