Skeleton algorithm for AmIterator was created in Pscf::AmIteratorTmpl. Should be followed for all future implementations of AmIterator, as it pays no attention to the actual math being done or what the residuals represent (scf, stress, etc).
Added three different types of error calculation for AmIterators: residual vector norm, relative residual vector norm (following Matsen 2011, eqn 13), and maximum residual vector element magnitude.
Apply a symmetry filter after each Pscf::Pspg::AmIterator iteration in Pscf::Pspg::AmIterator::update. This entails converting to basis function format and back to coordinate grid format, effectively removing all components of the coordinate grid field that do not obey the imposed symmetry group. This filter accounts for numerical error and leads to reduced number of iterations for calculations and reduced overall calculation time, even accounting for the added time due to the field format conversions. This will no longer be necessary once AmIterator in PSPG is changed to use basis format fields rather than coordinate grid format fields.
Moved isFlexible and scaleStress input parameters to Domain in both CPU and GPU. These can't be in AmIteratorTmpl, so this was a temporary choice and should likely be adjusted later after discussion.
GPU KERNELS AND EXECUTION
ThreadGrid -- a new way for managing GPU execution configuration that requires no thought on the user's part.
Reorganization of GPU computational resources into multiple header and implementation files.
Stabilizing parallel reduction kernels against non-power-of-two data sizes.
Forcing all classes to use the same kernels and kernel wrappers, rather than each re-implementing their own.
OTHER
Added Domain to PSPG.
Modifed Pscf::Pspg::DField class to allow it to be used on its own, as it functions much like a GPU version of the DArray class.
Creation of "safe" FFT methods that do not modify input but are slower. For use in situations where speed is not important (i.e. NOT solution of the MDEs).
DOCS AND TESTING
58 unit tests for GPU, including solvers, field conversions, iterator and system.
Addition of a "developer oriented" documentation make target, accessed by executing make html-dev in the pscfpp directory. This generates significantly more graphs and diagrams depicting dependencies, inheritance, calls and callers, aggregations/composition, includes and includers, etc. It also includes private members in class documentation, whereas the normal "html" target does not.
ITERATOR
GPU KERNELS AND EXECUTION
OTHER
DOCS AND TESTING