Please have a look at Read before posting: How do I get my question answered? . In particular, one of the suggestions there is to try to reduced the code to something as small as possible, and with a mesh that is as simple as possible.
I do understand that the issue you have is for your specific application on your specific domain, but asking a question with a long-ish code that we cannot reproduce (because we only a picture of the mesh) typically results in very few people being able to answer.
I scrolled through the code. One attempt could be to try (as a first step) to use mumps in the solver, rather than PETSc built in lu (which is much more limited than other solvers PETSc offers).