P3DFFT++ (a.k.a. P3DFFT v. 3) is a new generation of P3DFFT library that aims to provide a comprehensive framework for simulating multiscale phenomena. It takes the essence of P3DFFT further by creating an extensible, modular structure uniquely adaptable to a greater range of use cases. The users can specify in detail what kind of data layout they would like to use, both in terms of local memory ordering and the processor layout. Just like P3DFFT, P3DFFT++ is a distributed software package, using MPI as the primary method for interprocessor commubnication. It supports 1D, 2D and 3D (to come soon) domain decomposition schemes. As P3DFFT, P3DFFT++ also relies on lower-level libraries, for example FFTW to perform optimized 1D FFTs. Unlike P3DFFT, which was written in Fortran90, P3DFFT++ is written in C++. Interfaces are provided for C and Fortran. To learn about using the code the user is encouraged to study example programs in C++, C and FORTRAN subdirectories. Please e-mail Dmitry Pekurovsky (dmitry@sdsc.edu) for any questions or suggestions. Software contributions are welcome, assuming they follow the main ideas of the framework.
Thank you for all of your suggestions. One thing to clarify: for users of the library the internal structure should not be an issue. We are not using cmake at this time, instead we are using autoconf. Users can specify --prefix in configure options, which will install the library in the location of their choice, with include/, lib/ and share/ directories. I like your idea of separating the internal and external header files, and will work on it.
This library is not compatible with a "standard" cmake build
because the source files are in a directory called "build" (which is kind of non-intuitive anyway..). To make this library easier to use in applications, I would suggest restructuring the package (applying) as follows (https://hsf-training.github.io/hsf-training-cmake-webpage/06-projectstructure/index.html):
include/p3dfft.3/p3dfft.h
(or should it bep3dfft.3.h
?)src
tests