You probably don't want to store the field values for each iteration as that will quickly eat up memory. Instead, calculate the Fourier transforms as the code is running. Therefore, all you need to store is the Fourier transform at each point you are interested. You don't have to do this everywhere. Just pick a few strategic points and Fourier transform those.
Further, since your source is CW, you only have to integrate over one wave cycle to calculate the Fourier transform. Envision doing this at some interval when you think the simulation may be finished. If the Fourier transforms are different, you still have some transient phenomenon happening.
For more information on the Fourier transforms, see Lecture 7 here:
**broken link removed**