Added GetLayerZIntegral to return line integrals (thanks to Ken Wang for the feature request). Changed the return convention for GetAmplitudes, and added documentation for both functions.
Added GetAmplitudes to return the raw amplitudes for phase retrieval (thanks to Olivier Gauthier-Lafaye for the feature request).
pattern.c now detects 1D patterns and special cases them. Eigensolver performs workspace query for greater efficiency, and Fortran interfaces tidied up. Lanczos smoothing is now an option in FFT and PolBasisVL. Added SetLayerThickness to change only thickness and not affect the cached eigenmodes.
Fixed bug with rotation and translation in OutputPatternDescription (thanks Aaswath).
Eigenvector basis for uniform layers not stored (identity matrix). Added option UseLessMemory to not store kp (k-cross) matrices.
Fixed minor bugs and passes Valgrind without problems (for a few test runs).
Fixed normal-vector bug, resolving convergence issues with subpixel-smoothing and rectangular shapes.
Added CHOLMOD direct solver to pattern.c.
Fixed segment-segment intersection code. Several cases of incorrect dielectric discretization have been fixed. Changed Enable/Disable* functions to Use*.
Added MPI support. Compile with HAVE_MPI. S4.MPIRank and MPISize are available regardless of MPI support.
Halved the Lanczos filter spatial width. This seems to improve convergence. Changed default resolution to 8 from 64.
Added Kottke's subpixel smoothing method. Disabled by default. SetLattice can now take a single number for 1D periodicity. SpectrumSampler can now be parallelized.
Changed PolarizationBasisOversamplingFactor to Resolution.
Fixed crash when using Kiss FFT. I overzealously converted free to S4_free for kiss_fft.
Switched numerical memory allocation to 16-byte alignment. LinearSolve's now use LAPACK blocked code. Fixed some memory leaks with S4_Simulation objects (field cache was not being freed).
Added Integrate function.
Fixed nan output due to uninitialized matrices Ml, Mlp1, Bl, Blp1 in rcwa.cpp.
Fixed incorrect output of z-components of E- and H-fields (missing in-plane k-vector dependent phase).
Fixed memory leak in S4_DestroySolution; kx and Bands and Solution structures were not freed.
Fixed erroneous generation of values for Fourier transform for non-tensor materials in the context of a with-tensor stack. Added S4.ConvertUnits.
Fixed a bug with S-Matrix generation between two identical layers (previous results were incorrect).
Added anisotropic material support (currently incompatible with polarization basis, but without warning). Added cubic hermite spline interpolation.
Added real material data for metals.
Traced a problem with incorrect multithreaded results back to LAPACK. It is critical that LAPACK not use static allocation for local arrays (fixed with `-frecursive`).
Fixed 1D lattice G selection (even numbers would cause duplicates)
Fixed planewave excitation calculations for off-normal incidence. Previous s- and p-polarizations were mixed up and wrong. Added command line switches `a` and `t`.
Fixed circular truncation code; was dropping certain orders (2,2 on a square lattice).
Added ability to output diffraction efficiency, obtain the G-vector list, and fixed the Fourier transforms for non-unit area unit cells.
Added caching of polarization basis vector field Fourier transform matrices. Repeated computation of the same structure at different frequencies or k-vectors is much faster now that the vector field does not need to be recreated each time.
Initial announcement of S4. Supports multithreading.