whaley-group-berkeley / qspectra

Quantum simulations of nonlinear spectroscopy and dynamics for molecular aggregates
BSD 2-Clause "Simplified" License
16 stars 7 forks source link

More general methods for calculating third-order spectroscopy #14

Open shoyer opened 11 years ago

shoyer commented 11 years ago

We should be able to calculate photon-echo types experiments, both with response function and equation of motion based methods.

shoyer commented 10 years ago

Note the improvements list from _third_order_response:

This is a reasonable first draft. However, there are definitely some significant possible improvements in computational efficiency:

  1. When calculating a 2D signal, we could nest the Fourier transform inside the 3rd order response calculation so as only to calculate the signal at coherence frequencies of interest.
  2. We use the Heisenberg picture to avoid expensive integration loops only during the third time interval. Could we always use the Heisenberg picture instead of the Schroedinger picture? In principle, this could result in speedups of ~50x, since we would no longer need to loop over different times t1.
  3. Instead of using the commutator method of each dipole operator, we could use the left_multiply or right_multiply methods, based on whether the dipole operator is of creation or annihilation type (as determined by geometry) and whether the change in the density matrix is on the left or right sides (as indicated in THIRD_ORDER_PATHWAYS). Every right multplication would require a matching multiplication by -1. This book-keeping, however, would not save us any time in the integration steps (which are the probably the most expensive part of the calculation). But something like this might be necessary to implement (1), in which case it would be worth it.
  4. There are some redundant calculations, because some of the Liouville space pathways are equivalent up to or after certain interactions. For example, all photon-echo pathways start with 'gg->ge', and both GSB and ESE photon-echo pathways end with 'eg->gg'.

It's probably worth adding a two_dimensional_spectra function that incorporates (1) and automatically does the appropriate wrapping with fourier_transform.