Parallel PIC Codes for Distributed and Shared Memory Architectures with HPF and OpenMP