-
Notifications
You must be signed in to change notification settings - Fork 613
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
update on multilevel atoms #496
Comments
Here is a reference for others to follow this discussion involving the equations implemented in #273. |
σ in the polarization update equation (number 2 from the notes figure above) is actually a representation of two different |
Thanks again for working on this! |
I should mention that Song Liang Chua deserves much of the credit for the initial draft implementation, which he developed sitting together with me back in 2010. Song left and discontinued work on it, so the code was subsequently sent to Ardavan, who checked it into the repo and began debugging and further development. |
Congrats Alex. It's satisfying to know that all the hours we spent discussing and reviewing the derivation and implementation for this feature during the last two years was not in vain. Looking forward to merging your updates, adding a Python frontend, and using it to investigate lasing in complex structures. |
As a useful reference for this feature in addition to the tutorial example (which we need to port to Python once the frontend is ready), we should also create a new "Saturable Absorption" page under the "Features" tab of the documentation. This will be used to provide a brief theoretical background of modeling multilevel gain media in Meep including a discussion of the actual oscillator equations which are implemented in the code. We should also include the figures posted here which demonstrate agreement with SALT and your Bloch FDTD solver. Note that the documentation is part of the repo as markdown files in the doc/docs. |
Ok, i can take a look at this in a couple of days. |
So I've been working through Ardavan's multilevel atom implementation, I've found at least one bug (listed below), and I think I'm getting close, though I still haven't gotten laser thresholds to agree correctly. (I expect to be able to work through this, but i'll update if I stall out.)
However, I did want to solicit a bit of help with one change -- in lines ~250-310 of src/multilevel-atom.cpp, the code is updating N(t), the populations of the atomic levels, and this is dependent upon the electric field and polarization. In the conventional writing of the oscillator model of the gain atoms, this coupling takes the form of E * dP/dt. However, for perfect agreement with SALT, there is an additional term which is proportional to E * P. (this was part of the punchline from the notes I sent out a while ago.) To get this term, can I just copy lines 287-300, but replace instances of "dP = p - pp" with "Pave = p + pp", but divide by 2 and multiply by dt? I assume I'll still need to divide by 32 as well?
The previous bug(s) were (a) in the definition of alpha in scheme/structure.cpp, around line 1280. This is 1/(hbar omega), with hbar = 1. However, as frequencies were being specified without the 2pi, alpha needed to have the 2pi added back in by hand; and (b) there was some funny business going on with sigma in line 361 of multilevel-atom.cpp.
The text was updated successfully, but these errors were encountered: