How can I correct collisions and preserve mesh during dynamic simulation?

You can try using the mesh.smooth command, see: How to use ALE for moving boundary problems? - #2 by dokken