xt
आप जो कर रहे हैं, वह अलग-अलग क्रॉस सेक्शन के एक वेवगाइड (समय-समय पर अलग-अलग क्षमता वाले) के माध्यम से ऑप्टिकल प्रसार के लिए बीम प्रसार विधि का एक प्रच्छन्न संस्करण है , इसलिए इसे भी देखना उपयोगी होगा।
जिस तरह से मैं SSFM / BPM को देखता हूं वह इस प्रकार है। इसका आधार लीन सिद्धांत का टैरोटर उत्पाद सूत्र है:
limm→∞(exp(Dtm)exp(Vtm))m=exp((D+V)t)(1)
x−yx−y−zψ(x,y,z)tNΨ1024×1024N=10242=1048576
dtΨ=KΨ=(D+V(t))Ψ(2)
K=D+VN×Nu(N)Ψexp(Kt)iℏK=D+Vएनयू( एन)डी + वीमैंℏ∇2/ (2)m ) - मैं ℏ- 1वी0+ i ℏ- 1( वी0- वी( एक्स , वाई, ज़ेड, टी0) )वी0 हाथ में समस्या के लिए कुछ सुविधाजनक "मतलब है" संभावित है।
हम जाने:
डीवी==मैं ℏ2मीटर∇2- मैं ℏ- 1वी0मैं ℏ- 1( वी0- वी( एक्स , वाई, ज़ेड, टी ) )(3)
मैंने उन्हें इस तरह क्यों विभाजित किया है, यह नीचे स्पष्ट हो जाएगा।
के बारे में बात डीयह है कि यह एक हवाई जहाज की लहर के लिए विश्लेषणात्मक रूप से काम किया जा सकता है: यह गति समन्वयकों में एक सरल गुणन ऑपरेटर है। तो, बाहर काम करने के लिएΨ ↦ exp( Δ टीघ )Ψ, here are the first three steps of a SSFM/BPM cycle:
- Impart FFT to dataset Ψ to transform it into a set Ψ~ of superposition weights of plane waves: now the grid co-ordinates have been changed from x,y,z to kx,ky,kz;
- Impart Ψ~↦exp(ΔtD)Ψ~ by simply multiplying each point on the grid by exp(iΔt(V0−k2x+k2y+k2z)/ℏ);
Impart inverse FFT to map our grid back to exp(ΔtD)Ψ
.Now we're back in position domain. This is the better domain to impart the operator V of course: here V is a simple multiplication operator. So here is your last step of your algorithmic cycle:
Impart the operator Ψ↦exp(ΔtV)Ψ by simply multiplying each point on the grid by the phase factor exp(iΔt(V0−V(x,y,z,t))/ℏ)
....and then you begin your next Δt step and cycle over and over. Clearly it is very easy to put time-varying potentials V(x,y,z,t) into the code.
So you see you simply choose Δt small enough that the Trotter formula (1) kicks in: you're simply approximating the action of the operator exp(D+VΔt)≈exp(DΔt)exp(VΔt) and you flit back and forth with your FFT between position and momentum co-ordinates, i.e. the domains where V and D are simple multiplication operators.
Notice that you are only ever imparting, even in the discretised world, unitary operators: FFTs and pure phase factors.
One point you do need to be careful of is that as your Δt becomes small, you must make sure that the spatial grid spacing shrinks as well. Otherwise, suppose the spatial grid spacing is Δx. Then the physical meaning of the one discrete step is that the diffraction effects are travelling at a velocity Δx/Δt; when simulating Maxwell's equations and waveguides, you need to make sure that this velocity is much smaller than c. I daresay like limits apply to the Schrödinger equation: I don't have direct experience here but it does sound fun and maybe you could post your results sometime!
A second "experience" point with this kind of thing - I'd be almost willing to bet this is how you'll wind up following your ideas. We often have ideas that we want to do simple and quick and dirty simulations but it never quite works out that way! I'd begin with the SSFM as I've described above as it is very easy to get running and you'll quickly see whether or not its results are physical. Later on you can use your, say Mathematica SSFM code check the results of more sophisticated code you might end up building, say, a Crank Nicolson code along the lines of Kyle Kanos's answer.
Error Bounds
The Dynkin formula realisation of the Baker-Campbell-Hausdorff Theorem:
exp(DΔt)exp(V)Δt)=exp((D+V)Δt+12[D,V]Δt2+⋯)
converging for some
Δt>0 shows that the method is accurate to second order and can show that:
exp(DΔt)exp(V)Δt)exp(−12[D,V]Δt2)=exp((D+V)Δt+O(Δt3))
You can, in theory, therefore use the term exp(V)Δt)exp(−12[D,V]Δt2) to estimate the error and set your Δt accordingly. This is not as easy as it looks and in practice bounds end up being instead rough estimates of the error. The problem is that:
Δt22[D,V]=−iΔt22m(∂2xV(x,t)+2∂xV(x,t)∂x)
and there are no readily transformed to co-ordinates wherein [D,V] is a simple multiplication operator. So you have to be content with exp(−12[D,V]Δt2)≈e−iφΔt2(id−(12[D,V]−iφ(t))Δt2) and use this to estimate your error, by working out (id−(12[D,V]−iφ(t))Δt2)ψ for your currently evolving solution ψ(x,t) and using this to set your Δt on-the-fly after each cycle of the algorithm. You can of course make these ideas the basis for an adaptive stepsize controller for your simulation. Here φ is a global phase pulled out of the dataset to minimise the norm of (12[D,V]−iφ(t))Δt2; you can of course often throw such a global phase out: depending on what you're doing with the simulation results often we're not bothered by a constant phase global exp(∫φdt).
A relevant paper about errors in the SSFM/BPM is:
Lars Thylén. "The Beam Propagation Method: An Analysis of its Applicability", Optical and Quantum Electronics 15 (1983) pp433-439.
Lars Thylén thinks about the errors in non-Lie theoretic terms (Lie groups are my bent, so I like to look for interpretations of them) but his ideas are essentially the same as the above.