A Domain-Specific Language And Scalable Middleware For Particle-Mesh Simulations On Heterogeneous Parallel Computers