Developing sustainable and re-useable PIC and other kinetic software for high performance computing

PICKSC members and its collaborators are researching software engineering issues for how to modularize a PIC Framework and PIC production codes, on isolating PIC software that needs to be modified for next generation hardware with many layers of memory and parallelism, on striking the best balance between a general Framework and production codes, on developing new physics packages and the ability of models to work together, on documenting software, on benchmarking and comparison activities of the models and solvers that are supported, on developing examples of best practices, on educational software for undergraduate and graduate courses in plasma physics and computer science, and on maintaining a set of stable production codes for general use. This includes designing a software Framework for rapid construction of simple PIC codes, for the construction of complicated production codes, and for extracting components of a complex production code into such a Framework; in developing a Framework and data structures for effective use of existing and not yet defined hardware that has layers of memory and parallelism; in understanding the relationships between simulation methods e.g., collisional PIC and VFP; and in developing the ability to merge different methods together. We are also researching how to generate production codes that include proper initialization routines, boundary conditions, and diagnostics which run on computing platforms ranging from a desktop to leadership class facilities.

We are also engaged in research on how to produce a well documented Framework for parallel PIC codes and a set of basic production codes that will allow students and researchers from all levels and many disciplines to understand the inner workings of optimized PIC and kinetic simulation software. This would allow researchers at many levels of expertise to build their own software, or to make independent comparisons against commercially available codes, against their own codes, and against published simulation data. They will allow computer scientists who are developing auto-tuning methods and new compilers for parallelizing codes on next generation hardware to compare their performances against highly optimized codes. Moreover, they will provide new code developers a test-bed of parallelized and optimized software for performance comparison. Developing effective software and mechanisms to facilitate collaboration is challenging.