In [3]:
%pylab inline
Populating the interactive namespace from numpy and matplotlib

Problem 2b

I'll show three different ways of looking at the fields. It's confusing because we have to look at many points in two dimensions, and each point has a three-dimensional E-field vector. First, I'll plot the magnitude, $|E(x,z)|^2$ over a grid of $(x,z)$ pairs. In lieu of a movie, I'll show four snapshots of this quantity over a half-period.

In [75]:
k0 = 1.
Y = 0.5
X = 0.25

N = 100
x = linspace(-5,5,N)
z = linspace(-5,5,N)
xg,zg = meshgrid(x,z)

no2 = 1-X
nr2 = 1-X/(1-Y)
no = sqrt(no2)
nr = sqrt(nr2)

Ex = exp(-1j*k0*nr*zg)
Ey = -1j*exp(-1j*k0*nr*zg)
Ez = exp(-1j*k0*no*xg)
         
In [76]:
figure(figsize=(3,12))

for i in range(4):
    subplot(4,1,i+1)
    ph = i*pi/4
    F = real(Ex*exp(1j*ph))**2 + \
        real(Ey*exp(1j*ph))**2 + \
        real(Ez*exp(1j*ph))**2
    pcolormesh(xg,zg,F,cmap='RdBu')
    axis('equal')
    axis('tight')
    colorbar()

From this view, it looks like we have a simple plane wave. However, a glance at the colorbar indicates that there is a DC offset of the E-field. This should make sense, because the (x,y) component is a circular-polarized wave, so that has a constant value for $|E|$. It is the $E_z$ component that is contributing to the structure. Thus, we need to look at this in more detail.

Next, I'll show the same kind of plots, but instead of plotting the magnitude, $|E(x,z)|$, I'll try to show the actual vector using a quiver plot. Note that I'm ignoring $E_y$.

In [80]:
k0 = 1.
Y = 0.5
X = 0.25

N = 10
x = linspace(-5,5,N)
z = linspace(-5,5,N)
xg,zg = meshgrid(x,z)

no2 = 1-X
nr2 = 1-X/(1-Y)
no = sqrt(no2)
nr = sqrt(nr2)

Ex = exp(-1j*k0*nr*zg)
Ey = -1j*exp(-1j*k0*nr*zg)
Ez = exp(-1j*k0*no*xg)
         

figure(figsize=(3,12))

for i in range(4):
    subplot(4,1,i+1)
    ph = i*pi/4
    Exi = real(Ex*exp(1j*ph))
    Ezi = real(Ez*exp(1j*ph))
    quiver(xg,zg,Exi,Ezi)    
    axis('equal')
    axis('tight')

From these plots it is clear that the wave structure is quite complex, and this wave is not a simple TEM wave. However, this is not quite convincing yet, as it could still be considered one "wave". To try to get another look at this wave, I'll plot the Poynting vector. The calculation of the Poynting vector is shown using pencil and paper and is attached. Again, I'm ignoring the $y$ component to make this 2D plot.

In [86]:
k0 = 1.
Y = 0.5
X = 0.25

N = 10
x = linspace(-5,5,N)
z = linspace(-5,5,N)
xg,zg = meshgrid(x,z)

no2 = 1-X
nr2 = 1-X/(1-Y)
no = sqrt(no2)
nr = sqrt(nr2)

Ex = exp(-1j*k0*nr*zg)
Ey = -1j*exp(-1j*k0*nr*zg)
Ez = exp(-1j*k0*no*xg)
         

c = 3e8
w = k0*c
mu = 4*pi*1e-7

Sx = 1/(1j*w*mu)*(1j*k0*no + 1j*k0*nr*exp(-1j*k0*(-nr*zg + no*xg)))
Sy = 1j*nr/(mu*c) * exp(-1j*k0*(no*xg - nr*zg))
Sz = -1/(1j*w*mu)*(1j*k0*no*exp(-1j*k0*(nr*zg - no*xg))) - nr/(mu*c)

figure(figsize=(3,12))

for i in range(4):
    subplot(4,1,i+1)
    ph = i*pi/4
    Px = real(Sx*exp(1j*ph))
    Pz = real(Sz*exp(1j*ph))

    quiver(xg,zg,Px,Pz)  
    axis('equal')
    axis('tight')

From this it is clear that this is not a plane wave, since the Poynting vector is not in the direction of propagation, and, in fact, changes direction throughout one period.

So my final answer is NO.

In [171]:
import subprocess
import shutil
nb_name = 'ECE458_Final_Part1.ipynb' # There's probably a way to get this programmatically
cmd = ['ipython', 'nbconvert', '--to', 'slides', nb_name, \
       '--reveal-prefix', '"http://cdn.jsdelivr.net/reveal.js/2.6.2"',]
#      '--template','output_toggle']
# The --template command points to a custom template which opens and closes the input code cells with a click
subprocess.call(cmd)
html_name = '%s.slides.html' % (nb_name.split('.')[0])
shutil.copy(html_name, '/home/bhardin2/public_html/slideshows/')
In [90]:
nL = sqrt(10./11)
nR = sqrt(8./9)
z = 2*pi/(nL-nR)
print z
589.773989437
In [100]:
zp = z/4
Ey = -1j*exp(-1j*nR*zp) + 1j*exp(-1j*nL*zp)
print Ey
Ex = exp(-1j*nR*zp) + exp(-1j*nL*zp)
print Ex
print zp
(0.00624018083539-1.41419979499j)
(0.00624018083539-1.41419979499j)
147.443497359
In [169]:
Om = 2*pi*5.9e6*(1-5.2**2/5.9**2)
print Om
8274635.56556
In [170]:
print 9.11e-31/1.6e-19*Om*1e9
47113.7062514

Problem 2c

In [133]:
X = linspace(0,2,100)
Y = 0.5
n2 = 1 - X*(1-X)/(1-X-Y**2)
plot(X,n2,'k.-')
grid()
xlabel('X')
ylabel('n^2')
ylim((-2,2))
Out[133]:
(-2, 2)

The zero crossings occur at X=0.5 and X=1.5, which was found analytically in Part 1.

Problem 2d

The relevance of the above plot to the ionogram picture has a few aspects. The above plot refers to the red (not green) trace of the ionogram. In Part 1, we ignored the tilt of the magnetic field. At EISCAT, the magnetic field is almost vertical, so the approximation we made above is somewhat appropriate. As was shown in class, even with a tilt to the magnetic field, the zero-crossing at X=0.5 and X=1.5 is still valid. Thus, the position of the asymptote of the red trace is accurately characterized by the first intersection (X=0.5). The plot above also explains why the red trace extends to higher frequencies than the green trace. We see that there exists negative $n^2$ after $X=0.5$. This implies that, for certain frequencies $\omega$, there is a range of plasma frequencies where the O-mode propagates through while the X-mode reflects. These occur for $0.5 < X < 1$.

Problem 3a

In [135]:
th = pi/4
Y = 0.5
X = linspace(0,2,100)

YT = Y*sin(th)
YL = Y*cos(th)
T = YT**2/(2*(1-X))
Fp = T + sqrt(T**2 + YL**2)
Fm = T - sqrt(T**2 + YL**2)
n2p = 1 - X/(1-Fp)
n2m = 1 - X/(1-Fm)

plot(X, n2p, 'k--',label='plus')
plot(X, n2m, 'k-',label='minus')
grid()
legend(loc='best')
xlabel('X')
ylabel('n^2')
ylim((-2,2))
Out[135]:
(-2, 2)

Problem 3b

In [145]:
Y = 0.5

for thd in [5, 35, 55, 85]:
    th = thd*pi/180.
    
    # (0,1)
    X = linspace(0,1 - 1e-4,100)
    YT = Y*sin(th)
    YL = Y*cos(th)
    T = YT**2/(2*(1-X))
    Fp = T + sqrt(T**2 + YL**2)
    Fm = T - sqrt(T**2 + YL**2)
    n2p = 1 - X/(1-Fp)
    n2m = 1 - X/(1-Fm)
    plot(X, n2p, '--')
    plot(X, n2m, '-')
    
    # (1,2)
    X = linspace(1 + 1e-4,2,100)
    YT = Y*sin(th)
    YL = Y*cos(th)
    T = YT**2/(2*(1-X))
    Fp = T + sqrt(T**2 + YL**2)
    Fm = T - sqrt(T**2 + YL**2)
    n2p = 1 - X/(1-Fp)
    n2m = 1 - X/(1-Fm)
    plot(X, n2m, '--')
    plot(X, n2p, '-')

grid()
xlabel('X')
ylabel('n^2')
ylim((-2,2))
Out[145]:
(-2, 2)

I can't print in color, but the color plot can be provided upon request.

In [154]:
X = (9/1575.42)**2
print X
Y = 2e6/(2*pi*1575.42e6)
print Y
YT = Y * sin(3*pi/4)
YL = Y * cos(3*pi/4)
T = YT**2/(2*(1-X))
F = T - sqrt(T**2 + YL**2)
print F
R = 1j*F/YL
print R
S = -1j*YT/(1-X)*X/(1-F)
print S
3.2635653222e-05
0.000202047635668
-0.000142859047523
(-0+0.999928565594j)
-4.66211755421e-09j
In [155]:
X = (9/1575.42)**2
print X
Y = 2e6/(2*pi*1575.42e6)
print Y
YT = Y * sin(3*pi/4)
YL = Y * cos(3*pi/4)
T = YT**2/(2*(1-X))
F = T + sqrt(T**2 + YL**2)
print F
R = 1j*F/YL
print R
S = -1j*YT/(1-X)*X/(1-F)
print S
3.2635653222e-05
0.000202047635668
0.000142879459813
(-0-1.00007143951j)
-4.66344989109e-09j
In [158]:
X = (9/9.5)**2
print X
Y = 2e6/(2*pi*9.5e6)
print Y
YT = Y * sin(3*pi/4)
YL = Y * cos(3*pi/4)
T = YT**2/(2*(1-X))
F = T - sqrt(T**2 + YL**2)
print F
R = 1j*F/YL
print R
print 1./R
S = -1j*YT/(1-X)*X/(1-F)
print S
0.897506925208
0.0335063038088
-0.0211118535462
(-0+0.891076192177j)
-1.12223848957j
-0.203180251052j
In [161]:
X = (9/9.5)**2
print X
Y = 2e6/(2*pi*9.5e6)
print Y
YT = Y * sin(3*pi/4)
YL = Y * cos(3*pi/4)
T = YT**2/(2*(1-X))
F = T + sqrt(T**2 + YL**2)
print F
R = 1j*F/YL
print R
print 1./R
S = -1j*YT/(1-X)*X/(1-F)
print S
0.897506925208
0.0335063038088
0.0265886742836
(-0-1.12223848957j)
(-0+0.891076192177j)
-0.213136787373j
In [164]:
abs(1/R)**2 + abs(S)**2
Out[164]:
0.8394440703970646
In [166]:
X = (9/9.001)**2
print X
Y = 2e6/(2*pi*9.001e6)
print Y
YT = Y * sin(3*pi/4)
YL = Y * cos(3*pi/4)
T = YT**2/(2*(1-X))
F = T + sqrt(T**2 + YL**2)
print F
R = 1j*F/YL
print R
print 1./R
S = -1j*YT/(1-X)*X/(1-F)
print S
0.999777814809
0.0353638358164
2.81454313989
(-0-112.55467594j)
(-0+0.00888457091319j)
(-0+62.0105319557j)