1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
|
<?xml version="1.0"?>
<simulation xmds-version="2">
<name>Genas_system</name>
<author>Eugeniy Mikhailov and Simon Rochester</author>
<description>
License GPL.
Solving 4 level atom in 0->1 configuration,
with field propagation along spatial axis Z
no Doppler broadening
Fields:
light field, default circularly polarized
rf field along x
static B-field along z
M=0 upper state sublevel can be shifted independently
|
| ______ |2> m=1
|
| _______|3> m=0
|...................................... magnetically unshifted energy
|
|
|_______|4> m=-1
|
|
|
|
|
|
|
|
|
| ______________|1> m=0
We are solving
dE/dz+(1/c)*dE/dt=i*eta*rho_ji, where j level is higher then i.
Note that E is actually a Rabi frequency of electromagnetic field not the EM field
in xmds terms it looks like
dE_dz = i*eta*rhoji - 1/c*L[E], here we moved t dependence to Fourier space
VERY IMPORTANT: all Rabi frequency should be given in [1/s], if you want to
normalize it to something else look drho/dt equation.
No need to renormalizes eta as long as its express through i
the upper level decay rate in the same units as Rabi frequency.
</description>
<features>
<globals>
<![CDATA[
const double pi = M_PI;
const double c=3.e8;
const double lambda=794.7e-9; //wavelength in m
const double N=6e10*(1e6); //number of particles per cubic m i.e. density
const double Gamma=1*(2*M_PI*1e6); // characteristic decay rate of upper level used for eta calculations expressed in [1/s]
const double eta = 3*lambda*lambda*N*Gamma/16.0/M_PI; // eta constant in the wave equation for Rabi frequency. Units are [1/(m s)]
// repopulation rate (atoms flying in/out the laser beam) in [1/s]
const double gt=0.01*(2*M_PI*1e6);
// Natural linewidth of upper state in [1/s]
const double g0=1.*(2*M_PI*1e6);
const double zmax=7e-2;
complex Exc, Eyc; // Complex-conjugated Rabi frequency
complex r21, r31, r41, r32, r42, r43, r44; // density matrix elements
double delta0z(double z) {
// calculates detuning/shift of exited m=0 sublevel as a function of z
double delta;
delta = ( atan(100*(1.0-2.*z/zmax))/pi*2 )*delta0;
return delta;
}
]]>
</globals>
<benchmark />
<arguments>
<!-- Real and imaginary parts of complex Rabi frequency in [1/s] -->
<argument name="ExReo" type="real" default_value="(9.+0.00000001)*(2*M_PI*1.e4)" />
<argument name="ExImo" type="real" default_value="0." />
<argument name="EyReo" type="real" default_value="0." />
<argument name="EyImo" type="real" default_value="(9.-0.00000001)*(2*M_PI*1.e4)" />
<!-- light detuning in [1/s] from unshifted m=0 level-->
<argument name="delta" type="real" default_value="0.0*(2*M_PI*1e6)" />
<!--shift of upper-state M=0 sublevel-->
<argument name="delta0" type="real" default_value="14.*(2*M_PI*1e6)" />
<!--Static B-field Larmor frequency-->
<argument name="deltaL" type="real" default_value="15.*(2*M_PI*1e6)" />
<!--normalized rf Rabi frequency:
Orf = (Larmor frequency due to peak rf field)/sqrt(2)-->
<argument name="Orf" type="real" default_value="0.1*(2*M_PI*1e6)" />
<!--rf frequency-->
<argument name="orf" type="real" default_value="1.*(2*M_PI*1e6)" />
</arguments>
<bing />
<fftw plan="patient" />
<openmp />
<auto_vectorise />
<validation kind="run-time"/>
</features>
<!-- 'z' and 't' to have dimensions [m] and [s] -->
<geometry>
<propagation_dimension> z </propagation_dimension>
<transverse_dimensions>
<dimension name="t" lattice="1000" domain="(-1.0e-6, 1.0e-6)" />
</transverse_dimensions>
</geometry>
<!-- Rabi frequency -->
<vector name="E_field" type="complex" initial_space="t">
<components>Ex Ey</components>
<initialisation>
<![CDATA[
// Initial (at starting 'z' position) electromagnetic field does not depend on detuning
// as well as time
Ex=(ExReo+i*ExImo)*exp(-pow( ((t-0.0)/1e-7),2) );
Ey=(EyReo+i*EyImo)*exp(-pow( ((t-0.0)/1e-7),2) );
]]>
</initialisation>
</vector>
<vector name="density_matrix" type="complex" initial_space="t">
<components>r11 r22 r33 r12 r13 r14 r23 r24 r34 r44</components>
<initialisation>
<![CDATA[
r11 = 1; r22 = 0; r33 = 0; r44 = 0;
r12 = 0; r13 = 0; r14 = 0;
r23 = 0; r24 = 0;
r34 = 0;
]]>
</initialisation>
</vector>
<vector name="rfField" type="real" initial_space="t">
<components> rf </components>
<initialisation>
<![CDATA[
rf = Orf*sin(orf*t);
]]>
</initialisation>
</vector>
<sequence>
<integrate algorithm="ARK45" tolerance="0.05e-7" interval="zmax">
<samples>200 200</samples>
<operators>
<operator kind="cross_propagation" algorithm="SI" propagation_dimension="t">
<integration_vectors>density_matrix</integration_vectors>
<dependencies>E_field rfField</dependencies>
<boundary_condition kind="left">
<![CDATA[
r11 = 1; r22 = 0; r33 = 0; r44 = 0;
r12 = 0; r13 = 0; r14 = 0;
r23 = 0; r24 = 0;
r34 = 0;
]]>
</boundary_condition>
<![CDATA[
Exc = conj(Ex);
Eyc = conj(Ey);
r21=conj(r12);
r31=conj(r13);
r41=conj(r14);
r32=conj(r23);
r42=conj(r24);
r43=conj(r34);
// Equations of motions according to Simon's mathematica code
dr11_dt = gt - gt*r11 + (-Ey - Ex*i)*r12 + (-Ey + Ex*i)*r14 + (-Eyc + Exc*i)*r21 + g0*r22 + g0*r33 + (-Eyc - Exc*i)*r41 + g0*r44;
dr12_dt = (Eyc - Exc*i)*r11 + (-g0/2. - gt - delta*i + deltaL*i)*r12 + i*rf*r13 + (-Eyc + Exc*i)*r22 + (-Eyc - Exc*i)*r42;
dr13_dt = i*rf*r12 + (-g0/2. - gt - delta*i + i*delta0z(z))*r13 + i*rf*r14 + (-Eyc + Exc*i)*r23 + (-Eyc - Exc*i)*r43;
dr14_dt = (Eyc + Exc*i)*r11 + i*rf*r13 + (-g0/2. - gt - delta*i - deltaL*i)*r14 + (-Eyc + Exc*i)*r24 + (-Eyc - Exc*i)*r44;
dr22_dt = (Ey + Ex*i)*r12 + (Eyc - Exc*i)*r21 + (-g0 - gt)*r22 + i*rf*r23 - i*rf*r32;
dr23_dt = (Ey + Ex*i)*r13 + i*rf*r22 + (-g0 - gt - deltaL*i + i*delta0z(z))*r23 + i*rf*r24 - i*rf*r33;
dr24_dt = (Ey + Ex*i)*r14 + (Eyc + Exc*i)*r21 + i*rf*r23 + (-g0 - gt - 2*deltaL*i)*r24 - i*rf*r34;
dr33_dt = -(i*rf*r23) + i*rf*r32 + (-g0 - gt)*r33 + i*rf*r34 - i*rf*r43;
dr34_dt = -(i*rf*r24) + (Eyc + Exc*i)*r31 + i*rf*r33 - i*(deltaL - (g0 + gt)*i + delta0z(z))*r34 - i*rf*r44;
dr44_dt = (Ey - Ex*i)*r14 - i*rf*r34 + (Eyc + Exc*i)*r41 + i*rf*r43 + (-g0 - gt)*r44;
]]>
</operator>
<operator kind="ex" constant="yes">
<operator_names>Lt</operator_names>
<![CDATA[
Lt = i*1./c*kt;
]]>
</operator>
<integration_vectors>E_field</integration_vectors>
<dependencies>density_matrix</dependencies>
<![CDATA[
dEx_dz = i*eta*conj(r12-r14) - Lt[Ex] ;
dEy_dz = -eta*conj(r12+r14) - Lt[Ey] ;
]]>
</operators>
</integrate>
</sequence>
<!-- The output to generate -->
<output format="binary" filename="Genas_system.xsil">
<group>
<sampling basis="t(100)" initial_sample="yes">
<dependencies>E_field</dependencies>
<moments>Ex_re_out Ex_im_out Ey_re_out Ey_im_out</moments>
<![CDATA[
Ex_re_out = Ex.Re();
Ex_im_out = Ex.Im();
Ey_re_out = Ey.Re();
Ey_im_out = Ey.Im();
]]>
</sampling>
</group>
<group>
<sampling basis="t(100)" initial_sample="yes">
<dependencies>density_matrix</dependencies>
<moments>
r11_out r22_out r33_out r44_out
r12_re_out r12_im_out r13_re_out r13_im_out r14_re_out r14_im_out
r23_re_out r23_im_out r24_re_out r24_im_out
r34_re_out r34_im_out
</moments>
<![CDATA[
// populations output
r11_out = r11.Re();
r22_out = r22.Re();
r33_out = r33.Re();
r44_out = r44.Re();
// coherences output
r12_re_out = r12.Re();
r12_im_out = r12.Im();
r13_re_out = r13.Re();
r13_im_out = r13.Im();
r14_re_out = r14.Re();
r14_im_out = r14.Im();
r23_re_out = r23.Re();
r23_im_out = r23.Im();
r24_re_out = r24.Re();
r24_im_out = r24.Im();
r34_re_out = r34.Re();
r34_im_out = r34.Im();
]]>
</sampling>
</group>
</output>
</simulation>
<!--
vim: ts=2 sw=2 foldmethod=indent:
-->
|