From 48d78b0de9c75c9d858a9e7598cf56d46545c6af Mon Sep 17 00:00:00 2001 From: Eugeniy Mikhailov Date: Tue, 15 Dec 2009 17:19:30 +0000 Subject: refining, adding magnetic field splitting, selection rule correction --- rb87_D1_line.m | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'rb87_D1_line.m') diff --git a/rb87_D1_line.m b/rb87_D1_line.m index 09b2359..ac66de8 100644 --- a/rb87_D1_line.m +++ b/rb87_D1_line.m @@ -19,13 +19,15 @@ useful_constants; % ---- ---- ---- |S,F=1> % m=-1 m=0 m=1 +B_field=.2; + w_hpf_ground=6834; w_hpf_exited=817; w_sf2 = w_hpf_ground; % Distance from |S,F=1> to |S,F=2> w_pf1 =1e9; % something big Distance from |S,F=1> to |P,F=1> w_pf2 = w_pf1+w_hpf_exited; %Distance from |S,F=1> to |P,F=2> gmg=.7; % gyro magnetic ration for ground level -gme=.7; % gyro magnetic ration for exited level +gme=.0; % gyro magnetic ration for exited level % CHECKME %bottom level |F=1> @@ -46,29 +48,30 @@ levels(10)=struct( "ang_momentum", 1, "total_momentum", 1, "m", 0, "energy levels(11)=struct( "ang_momentum", 1, "total_momentum", 1, "m", 1, "energy", w_pf1, "gm", -gme); % second exited level |F=2> -levels(12)=struct( "ang_momentum", 1, "total_momentum", 2, "m", -2, "energy", w_pf2, "gm", gme); -levels(13)=struct( "ang_momentum", 1, "total_momentum", 2, "m", -1, "energy", w_pf2, "gm", gme); -levels(14)=struct( "ang_momentum", 1, "total_momentum", 2, "m", 0, "energy", w_pf2, "gm", gme); -levels(15)=struct( "ang_momentum", 1, "total_momentum", 2, "m", 1, "energy", w_pf2, "gm", gme); -levels(16)=struct( "ang_momentum", 1, "total_momentum", 2, "m", 2, "energy", w_pf2, "gm", gme); +%levels(12)=struct( "ang_momentum", 1, "total_momentum", 2, "m", -2, "energy", w_pf2, "gm", gme); +%levels(13)=struct( "ang_momentum", 1, "total_momentum", 2, "m", -1, "energy", w_pf2, "gm", gme); +%levels(14)=struct( "ang_momentum", 1, "total_momentum", 2, "m", 0, "energy", w_pf2, "gm", gme); +%levels(15)=struct( "ang_momentum", 1, "total_momentum", 2, "m", 1, "energy", w_pf2, "gm", gme); +%levels(16)=struct( "ang_momentum", 1, "total_momentum", 2, "m", 2, "energy", w_pf2, "gm", gme); Nlevels=size(levels)(2); H0=zeros(Nlevels); -ang_momentum = [1:Nlevels]; -total_momentum = [1:Nlevels]; -m = [1:Nlevels]; -gm = [1:Nlevels]; +energy = [1:Nlevels].*0; +ang_momentum = [1:Nlevels].*0; +total_momentum = [1:Nlevels].*0; +m = [1:Nlevels].*0; +gm = [1:Nlevels].*0; for i=1:Nlevels - H0(i,i) = levels(i).energy; + energy(i) = levels(i).energy; ang_momentum(i) = levels(i).ang_momentum; total_momentum(i) = levels(i).total_momentum; m(i) = levels(i).m; gm(i) = levels(i).gm; endfor -H0=H0*hbar; +H0=diag(energy)*hbar; dipole_elements.left = zeros(Nlevels); @@ -87,7 +90,12 @@ for j=1:Nlevels dipole_elements.right(j,k)=1; endif if ( ((m(j)- m(k))==0) && ( H0(j,j) > H0(k,k)) ) - dipole_elements.linear(j,k)=1; + if ( ( total_momentum(j) == 1 ) && (total_momentum(k) == 1 ) ) + % remember m=0 ->m'=0 is forbidden when F=1 and F'=1 + dipole_elements.linear(j,k)=0; + else + dipole_elements.linear(j,k)=1; + endif endif endif endfor @@ -120,11 +128,14 @@ endfor gamma_hpf=.001; for i=1:Nlevels for j=1:Nlevels - if ( abs( H0(i,i) - H0(j,j)) == w_hpf_ground ) + if ( abs( H0(i,i) - H0(j,j)) == w_hpf_ground*hbar ) % ground hyperfine are mixed together g_decay(i,j)=gamma_hpf; endif endfor endfor - +% apply B field Zeeman splitting +energy+=B_field * ( gm .* m); +% convert frequency to energy units +H0=diag(energy)*hbar; -- cgit v1.2.3