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
|
function [psr_rad]=faraday_vs_B(detuning_freq, Ep, psi_el, B_fields, theta, phi)
% calculates transmission if light polarizations vs B field in the cell
% for given laser probe and B fields array
% Probe field defined by field strength (Ep) and ellipticity angle (pse_el)
% Magnetic field defined by magnitude (B_field) and angles theta and phi.
%
% Note: it is expensive to recalculate atom property for each given B_field strength
% so run as many calculation for constant magnetic field as possible
t0 = clock (); % we will use this latter to calculate elapsed time
%tune probe frequency
detuning_p=0;
N_steps=length(B_fields)
kappa_p =zeros(1,N_steps+1);
kappa_m =zeros(1,N_steps+1);
xi_linear=zeros(1,N_steps);
xi_left =zeros(1,N_steps);
xi_right =zeros(1,N_steps);
% load useful functions;
useful_functions;
% some physical constants
useful_constants;
basis_transformation; % load subroutines
fprintf (stderr, "tuning laser in forloop to set conditions vs detuning\n");
fflush (stderr);
for B_field_cntr=1:N_steps;
B_field=B_fields(B_field_cntr)
% load atom energy levels and decay description
rb87_D1_line;
fprintf (stderr, "calculating atom properties\n");
fflush (stderr);
pfile='atomic_B_field.mat'; % the parent file where B_field is stored. This is the parameter for calculated L0_and_polarization_submatrices
cfile='L0m_and_polarizability_calculated.mat'; % the child file to which calculated matrices are written
need_update=false;
[s, err_p, msg] = stat (pfile);
if(err_p)
%file does not exist
need_update=true;
else
B_field_cur=B_field;
load (pfile); % loading old B_field value
if (B_field ~= B_field_cur)
% old and current B field are different
B_field=B_field_cur;
need_update=true;
else
need_update=false;
endif
endif
[s, err, msg] = stat (cfile);
if(err)
%file does not exist
need_update=true;
endif;
if ( !need_update)
% matrices already calculated and up to date, all we need to load them
load(cfile);
else
% calculate E_field independent properties of the atom
% to be used as sub matrix templates for Liouville operator matrix
[L0m, polarizability_m]=L0_and_polarization_submatrices( ...
Nlevels, ...
H0, g_decay, g_dephasing, dipole_elements ...
);
save(pfile, 'B_field');
save(cfile, 'L0m', 'polarizability_m');
endif
elapsed_time = etime (clock (), t0);
fprintf (stderr, "elapsed time so far is %.3f sec\n",elapsed_time);
fflush (stderr);
global atom_properties;
atom_properties.L0m=L0m;
atom_properties.polarizability_m=polarizability_m;
atom_properties.dipole_elements=dipole_elements;
%light_positive_freq = [wp];
E_field_drive = [0 ];
E_field_probe = [Ep ];
E_field_zero = [0 ];
E_field_lab_pos_freq.linear = E_field_zero + (1.00000+0.00000i)*E_field_probe + (1.00000+0.00000i)*E_field_drive;
% phi is angle between linear polarization and axis x
%phi=pi*2/8;
% theta is angle between lab z axis (light propagation direction) and magnetic field axis (z')
%theta=0;
% psi_el is the ellipticity parameter (phase difference between left and right polarization)
%psi_el=-30/180*pi;
% we define light as linearly polarized
% where phi is angle between light polarization and axis x
% only sign of modulation frequency is important now
% we define actual frequency later on
[E_field_lab_pos_freq.x, E_field_lab_pos_freq.y] = rotXpolarization(phi, E_field_lab_pos_freq.linear);
% we add required ellipticity
E_field_lab_pos_freq.x*=exp(I*psi_el);
E_field_lab_pos_freq.y*=exp(-I*psi_el);
E_field_lab_pos_freq.z=E_field_zero;
E_field_pos_freq=xyz_lin2atomic_axis_polarization(theta, E_field_lab_pos_freq);
wp0=w_pf1-w_sf2; %Fg=2 -> Fe=1
wp=wp0;
light_positive_freq=[ wp];
% we calculate dc and negative frequencies as well as amplitudes
[modulation_freq, E_field] = ...
light_positive_frequencies_and_amplitudes2full_set_of_modulation_frequencies_and_amlitudes(...
light_positive_freq, E_field_pos_freq);
freq_index=freq2index(wp,modulation_freq);
atom_field_problem.E_field = E_field;
atom_field_problem.modulation_freq = modulation_freq;
atom_field_problem.freq_index = freq_index;
problems_cell_array=atom_field_problem;
save '/tmp/problem_definition.mat' problems_cell_array atom_properties detuning_freq ;
fprintf (stderr, "now really hard calculations begin\n");
fflush (stderr);
[xi_linear_i, xi_left_i, xi_right_i]=susceptibility_steady_state_at_freq( problems_cell_array);
%[xi_linear, xi_left, xi_right]=cellfun( @susceptibility_steady_state_at_freq, problems_cell_array);
xi_left(B_field_cntr)=xi_left_i;
xi_right(B_field_cntr)=xi_right_i;
xi_linear(B_field_cntr)=xi_linear_i;
endfor
save '/tmp/xi_vs_B.mat' detuning_freq xi_linear xi_left xi_right E_field_pos_freq E_field_probe B_fields psi_el;
psr_rad=output_faraday_results_vs_B;
elapsed_time = etime (clock (), t0)
return
% vim: ts=2:sw=2:fdm=indent
|