ngedwin98 / GaussianSSF.jl

Quantum split-step Fourier simulations for nonlinear Gaussian-state pulse propagation
8 stars 0 forks source link

Off by -1im in QD3WM #2

Open SamarthSriramDev opened 2 months ago

SamarthSriramDev commented 2 months ago

Hello Edwin and Ryo, I hope you are doing well.

I am Samarth Sriram (working with Prof. Avik Dutt), we met on zoom last December. I was recently looking at your code for the chi-2 QD3WM case and I noticed that in "models.jl" on line 30, there isn't an imaginary number and also on line 42, there isn't a negative sign. Please correct me if I am wrong with these observation.

Thanks and Regards, Samarth.

ngedwin98 commented 2 months ago

Hi Samarth, thanks for inquiring about this! In this package, our convention for the quasi-degenerate three-wave mixing (QD3WM) model is described by the (photon-normalized) coupled-wave equations

$\partial_z A = -\mathrm{i} F^{(1)}(z, A, B) = \epsilon B A^\ast$ $\partial_z B = -\mathrm{i} F^{(2)}(z, A, B) = -\frac{1}{2} \epsilon A^2$,

where, as is common notation in nonlinear optics, $A$ and $B$ are the fundamental and second-harmonic envelopes and the propagation coordinate is $z$. In particular, $\epsilon$ is taken to be real in our convention. This should be consistent with what is documented in README.md (see the equations here and here).

However, in the literature you may find the more common "symmetric" form

$\partial_z A = \mathrm{i} \epsilon B A^\ast$ $\partial_z B = \frac{\mathrm{i}}{2} \epsilon A^2$,

which is obtained from our convention by the transformation $B \mapsto \mathrm{i} B$, so it can be realized by simply adding a phase shift to the initial condition for the $B$ field, performing simulations in our convention, and then undoing that phase shift at the end.

More generally, all equivalent equations can actually be obtained by allowing $\epsilon$ to be complex, i.e., if we were to write

$\partial_z A = \epsilon B A^\ast$ $\partial_z B = -\frac{1}{2} \epsilon^\ast A^2$,

corresponding to a Hermitian generator (e.g., a Hamiltonian if we are describing propagation in slow time $t$) of the form $\frac{1}{2\mathrm{i}} \left( \epsilon \hat B^\dagger \hat A^2 - \epsilon^\ast \hat B \hat A^{\dagger2} \right)$. Unfortunately, the current version of the package hard-codes ϵ as a Float64, but in future versions, we intend to generalize it to be a genericNumber, so that the phase rotation trick will no longer be necessary.

Does this help in allowing the code to cover the use case you have in mind?