円形導波管¶
モジュールのインポート¶
In [1]:
import numpy as np
from scipy.special import jv, yv # ベッセル関数
from scipy.special import jn_zeros, jnp_zeros, jnjnp_zeros, jnyn_zeros # ベッセル関数の零点
from scipy import optimize
import matplotlib.pyplot as plt
import pandas as pd
図のフォーマットの一括設定¶
In [2]:
import scienceplots
#Warning : As of version 2.0.0, you need to add import scienceplots before setting the style (plt.style.use('science')).
plt.style.use(['science', 'notebook'])
# rcPramsを使ってTeXのフォントをデフォルトにする
#plt.rcParams['font.family'] = 'Times New Roman' # font familyの設定
plt.rcParams['font.family'] = 'serif' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'cm' # math fontの設定
#plt.rcParams["font.size"] = 9
plt.rcParams['figure.figsize'] = [6, 5]
単位ベクトルの計算(ユーザ関数)¶
In [3]:
def uvector2(aa):
norm = np.linalg.norm(aa, axis=1, keepdims=True)
with np.errstate(divide="ignore", invalid="ignore"):
uv = np.where(norm==0, np.zeros(aa.shape[1]), aa / norm)
return norm, uv
円形導波管モードに対する特性方程式の根の計算(ユーザ関数)¶
In [4]:
def circular_waveguide_xi2(imode,m, n): # 特性方程式の根
if imode == 1: # TE
xi = jnp_zeros(m,n)
elif imode == -1: # TM
xi = jn_zeros(m,n)
return xi[n-1]
円形導波管の伝搬モードの位相定数,遮断モードの減衰定数の計算(ユーザ関数)¶
In [5]:
def beta_alpha(sk, kc): # 位相定数,減衰定数
beta, wl_g, alpha = 0.0, 0.0, 0.0
kz2 = sk**2-kc**2
beta = np.where(sk>kc, np.sqrt(kz2), 0.0)
alpha = np.where(sk<=kc, np.sqrt(-kz2), 0.0)
return beta, alpha
円形導波管のモード関数(電界および磁界の$x$成分,$y$成分)の計算(ユーザ関数)¶
In [6]:
# imode = 1 (TE), -1 (TM)
# ic = 1(sin-mode), 2(cos-mode)
def circular_waveguide_mode(rho,phi, a,imode,m,n_xi,xi,ic): # 円形導波管のモード関数
xia = xi/a
if m==0:
em = 1.0
if imode==1:# TE
ic = 2
elif imode==-1:# TM
ic = 1
else:
em = 2.0
if imode==1:# TE
besjmx = jv(m,xi)
amn = np.sqrt(em/np.pi/(xi*xi-m*m)) / np.abs(besjmx)
elif imode==-1:# TM
besjmx = jv(m+1,xi)
amn = np.sqrt(em/np.pi) /xi /np.abs(besjmx)
phim = m*phi
sp = np.sin(phim)
cp = np.cos(phim)
x = xia * rho
besjmm = np.where(np.abs(rho)>a, 0.0, jv(m-1,x))
besjmp = np.where(np.abs(rho)>a, 0.0, jv(m+1,x))
bmn = amn*xi/2.0/a
e_rho = (besjmm + imode*besjmp) * bmn
e_phi = (-besjmm + imode*besjmp) * bmn
if ic==1:
e_rho = e_rho * cp
e_phi = e_phi * sp
elif ic==2:
e_rho = e_rho * sp
e_phi = -e_phi * cp
h_rho = -e_phi
h_phi = e_rho
return e_rho, e_phi
位置ベクトルの極座標$(\rho, \phi)$から直角座標$(x,y)$への変換(ユーザ関数)¶
In [7]:
def rhophi_xy(e_rho,e_phi, phi):
sp = np.sin(phi)
cp = np.cos(phi)
e_x = e_rho*cp - e_phi*sp
e_y = e_rho*sp + e_phi*cp
return e_x, e_y
電界のモード関数の極座標成分$e_\rho$, $e_\phi$から電界の直角座標成分$e_x$,$e_y$,磁界の直角座標成分$h_x$,$h_y$への変換(ユーザ関数)¶
In [8]:
def rhophi_xy_eh(e_rho,e_phi, phi): #
sp = np.sin(phi)
cp = np.cos(phi)
e_x = e_rho*cp - e_phi*sp
e_y = e_rho*sp + e_phi*cp
h_x = -e_y
h_y = e_x
return e_x, e_y, h_x, h_y
2次元データからカット面データの切り取り(ユーザ関数)¶
In [9]:
def two_one_dim(aa):
co_h = aa[::-1,n_phi//2]
co_h = np.append(co_h, aa[:,0])
co_e = aa[::-1,n_phi*3//4]
co_e = np.append(co_e, aa[:,n_phi//4])
co_45 = aa[::-1,n_phi*5//8]
co_45 = np.append(co_45, aa[:,n_phi//8])
with np.errstate(divide="ignore", invalid="ignore"):
co_e_db = 20.0*np.log10(np.abs(co_e))
co_h_db = 20.0*np.log10(np.abs(co_h))
co_45_db = 20.0*np.log10(np.abs(co_45))
return co_e, co_h, co_45, co_e_db, co_h_db, co_45_db
TE-mode¶
TE$_{1n}$モードに対しては,ベッセル関数の導関数 $J_1'(x)$ の零点,つまり$J_1'(x) =0$を満たす解を求め,
In [10]:
n = 5
chi_TE = jnp_zeros(1,n) # TE-mode
chi_TE
Out[10]:
array([ 1.84118378, 5.33144277, 8.53631637, 11.7060049 , 14.86358863])
TM-mode¶
TM$_{1n}$モードに対しては,ベッセル関数 $J_1(x)$ の零点,つまり$J_1(x) =0$を満たす解を求め,
In [11]:
chi_TM = jn_zeros(1,n) # TM-mode
chi_TM
Out[11]:
array([ 3.83170597, 7.01558667, 10.17346814, 13.32369194, 16.47063005])
TE$_{1n}$およびTM$_{1n}$モードを遮断周波数の低い順に並べて,
In [12]:
n2 = n*2
chi = np.empty(n2)
chi[0::2] = chi_TE[:]
chi[1::2] = chi_TM[:]
chi
Out[12]:
array([ 1.84118378, 3.83170597, 5.33144277, 7.01558667, 8.53631637, 10.17346814, 11.7060049 , 13.32369194, 14.86358863, 16.47063005])
モードの次数などを配列に設定して,
In [13]:
mm = np.ones(n2, dtype=np.int8) # モードの次数 m
i = np.arange(n, dtype=np.int8)
nn = np.empty(n2, dtype=np.int8) # モードの次数 n
nn[0::2] = i[:]+1
nn[1::2] = i[:]+1
mode = np.empty(n2, dtype=object)
mode[0::2] = 'TE'
mode[1::2] = 'TM'
imode = np.empty(n2, dtype=np.int8)
imode[mode=='TE'] = 1
imode[mode=='TM'] = -1
mm, nn, mode, imode
Out[13]:
(array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int8), array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5], dtype=int8), array(['TE', 'TM', 'TE', 'TM', 'TE', 'TM', 'TE', 'TM', 'TE', 'TM'], dtype=object), array([ 1, -1, 1, -1, 1, -1, 1, -1, 1, -1], dtype=int8))
円形導波管の断面寸法¶
In [14]:
D = 23.4 # X-bandで用いられる円形導波管の直径
a = D/2 # 円形の半径 [mm]
遮断波数¶
In [15]:
k_c = chi/a # 遮断波数
k_c
Out[15]:
array([0.15736614, 0.32749624, 0.45567887, 0.59962279, 0.72959969, 0.86952719, 1.00051324, 1.13877709, 1.27039219, 1.40774616])
遮断波長¶
In [16]:
wl_c = 2*np.pi/k_c # 遮断波長
wl_c
Out[16]:
array([39.92717557, 19.1855191 , 13.78862556, 10.47856317, 8.61182563, 7.2259791 , 6.27996218, 5.51748483, 4.94586267, 4.46329423])
遮断周波数¶
In [17]:
CCC = 299.79
f_c = CCC/wl_c # 遮断周波数
f_c
Out[17]:
array([ 7.50841991, 15.62584772, 21.74183342, 28.6098385 , 34.81143404, 41.48780338, 47.73754862, 54.33454 , 60.61429932, 67.16787746])
In [18]:
print("a =",a,'[mm]')
print(f"{'No.':>7s}",f"{'mode':>7s}",f"{'chi':>10s}",f"{'k_c':>10s}",f"{'wl_c[mm]':>10s}",f"{'f_c[GHz]':>10s}")
for i in range(0,n2):
print(f'{i+1:6d} {mode[i]:2s} {mm[i]:2d} {nn[i]:2d} {chi[i]:10.6f} {k_c[i]:10.6f} {wl_c[i]:10.6f} {f_c[i]:10.6f}')
a = 11.7 [mm] No. mode chi k_c wl_c[mm] f_c[GHz] 1 TE 1 1 1.841184 0.157366 39.927176 7.508420 2 TM 1 1 3.831706 0.327496 19.185519 15.625848 3 TE 1 2 5.331443 0.455679 13.788626 21.741833 4 TM 1 2 7.015587 0.599623 10.478563 28.609838 5 TE 1 3 8.536316 0.729600 8.611826 34.811434 6 TM 1 3 10.173468 0.869527 7.225979 41.487803 7 TE 1 4 11.706005 1.000513 6.279962 47.737549 8 TM 1 4 13.323692 1.138777 5.517485 54.334540 9 TE 1 5 14.863589 1.270392 4.945863 60.614299 10 TM 1 5 16.470630 1.407746 4.463294 67.167877
データを辞書としてまとめると,¶
In [19]:
data = {
"No.": list(range(1, n2+1)),
"mode": mode,
"m": mm,
"n": nn,
"chi": chi,
"k_c": k_c,
"wL_c[mm]": wl_c,
"f_c[GHz]": f_c
}
pandasのDataFrameに変換¶
In [20]:
df = pd.DataFrame(data)
print(df)
No. mode m n chi k_c wL_c[mm] f_c[GHz] 0 1 TE 1 1 1.841184 0.157366 39.927176 7.508420 1 2 TM 1 1 3.831706 0.327496 19.185519 15.625848 2 3 TE 1 2 5.331443 0.455679 13.788626 21.741833 3 4 TM 1 2 7.015587 0.599623 10.478563 28.609838 4 5 TE 1 3 8.536316 0.729600 8.611826 34.811434 5 6 TM 1 3 10.173468 0.869527 7.225979 41.487803 6 7 TE 1 4 11.706005 1.000513 6.279962 47.737549 7 8 TM 1 4 13.323692 1.138777 5.517485 54.334540 8 9 TE 1 5 14.863589 1.270392 4.945863 60.614299 9 10 TM 1 5 16.470630 1.407746 4.463294 67.167877
In [21]:
display(df)
No. | mode | m | n | chi | k_c | wL_c[mm] | f_c[GHz] | |
---|---|---|---|---|---|---|---|---|
0 | 1 | TE | 1 | 1 | 1.841184 | 0.157366 | 39.927176 | 7.508420 |
1 | 2 | TM | 1 | 1 | 3.831706 | 0.327496 | 19.185519 | 15.625848 |
2 | 3 | TE | 1 | 2 | 5.331443 | 0.455679 | 13.788626 | 21.741833 |
3 | 4 | TM | 1 | 2 | 7.015587 | 0.599623 | 10.478563 | 28.609838 |
4 | 5 | TE | 1 | 3 | 8.536316 | 0.729600 | 8.611826 | 34.811434 |
5 | 6 | TM | 1 | 3 | 10.173468 | 0.869527 | 7.225979 | 41.487803 |
6 | 7 | TE | 1 | 4 | 11.706005 | 1.000513 | 6.279962 | 47.737549 |
7 | 8 | TM | 1 | 4 | 13.323692 | 1.138777 | 5.517485 | 54.334540 |
8 | 9 | TE | 1 | 5 | 14.863589 | 1.270392 | 4.945863 | 60.614299 |
9 | 10 | TM | 1 | 5 | 16.470630 | 1.407746 | 4.463294 | 67.167877 |
分散特性の計算¶
In [22]:
f_stop = 50.0
nf = 31
fff = np.empty((n2,nf))
omega = np.empty((n2,nf))
beta_f = np.empty((n2,nf))
alpha_f = np.empty((n2,nf))
beta_f_norm = np.empty((n2,nf))
for i in range(n2):
if f_stop <= f_c[i]:
continue
ff = np.array([f_c[i]+(f_stop-f_c[i])*(j/(nf-1))**4 for j in range(nf)])# リスト内包表記
fff[i,:] = ff
omega[i,:] = 2*np.pi*ff
wwl = CCC/ff # 自由空間波長[mm]
ssk = 2*np.pi/wwl # 自由空間波数
tmp = ssk**2-k_c[i]**2
beta_f[i,:] = np.sqrt(ssk**2-k_c[i]**2)
beta_f_norm[i,:] = beta_f[i,:]/ssk
k_0 = np.linspace(0.0,1.0,101)
omega_0 = k_0*CCC
分散ダイアグラム(dispersion diagram):$\beta$-$\omega$の関係¶
In [23]:
fig = plt.figure(figsize=(8, 6))
plt.text( 0.35, 10, f"$a=${a:.1f} mm", fontsize=16)
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on() # 補助目盛りをつける
plt.xlabel(r"$\beta$") # x軸のラベル設定
plt.ylabel(r"$\omega$") # y軸のラベル設定
plt.xlim(0, 0.7) # y軸範囲の設定
plt.ylim(0, 200.0) # y軸範囲の設定
for i in range(4):
plt.plot(beta_f[i,:], omega[i,:], label=rf"{mode[i]}$_{{{mm[i]}{nn[i]}}}$")
plt.plot(k_0, omega_0, '--', label='light')
plt.legend(ncol=1, loc='lower right', fancybox=False, frameon=True)
fig.savefig('p3_tlt_s13_1.pdf')
plt.show()
分散特性(dispersion characteristic):正規化した位相定数 $\beta/k_0$ の周波数特性¶
In [24]:
fig = plt.figure(figsize=(8, 6))
plt.text( 31.0, 0.9, f"$a=${a:.1f} mm", fontsize=16)
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on() # #補助目盛りをつける
plt.xlabel(r"$f$ [GHz]") # x軸のラベル設定
plt.ylabel(r"$\beta/k_0$") # y軸のラベル設定
plt.xlim(5, 40.0) # y軸範囲の設定
plt.ylim(0, 1.0) # y軸範囲の設定
for i in range(5):
plt.plot(fff[i,:], beta_f_norm[i,:], label=rf"{mode[i]}$_{{{mm[i]}{nn[i]}}}$")
plt.legend(ncol=1, loc='upper left', fancybox=False, frameon=True)
fig.savefig('p3_tlt_s13_2.pdf')
plt.show()
モードの設定¶
In [25]:
imode, m, n = 1, 1, 1
if imode==1:
s_mode = 'TE_'+ str(m) +'_' + str(n)
t_mode = 'TE '+ str(m) +',' + str(n)
else:
s_mode = 'TM_'+ str(m) +'_' + str(n)
t_mode = 'TM '+ str(m) +',' + str(n)
xi = circular_waveguide_xi2(imode, m, n)
s_mode, t_mode, xi
Out[25]:
('TE_1_1', 'TE 1,1', 1.8411837813406595)
モード関数の計算¶
In [26]:
qq = 180.0/np.pi
rho_min, rho_max, n_rho = 0.001, 1.0, 61
phi_min, phi_max, n_phi = 0.0, 2.0*np.pi, 361
rho = np.linspace(rho_min, rho_max, n_rho)
phi = np.linspace(phi_min, phi_max, n_phi)
pphi, rrho = np.meshgrid(phi,rho, indexing='xy') # xy座標の並び (デフォルト)
#ic = 1# x-pol.
ic = 2# y-pol.
a = 1.0
e_rho, e_phi = circular_waveguide_mode(rrho,pphi, a,imode,m,n,xi,ic)
e_x, e_y, h_x, h_y = rhophi_xy_eh(e_rho,e_phi, pphi)
emax = np.array([e_x.max(), e_y.max(), e_rho.max(), e_phi.max()])
emaxx = emax.max()
e_x = e_x/emaxx
e_y = e_y/emaxx
e_rho = e_rho/emaxx
e_phi = e_phi/emaxx
e_x.max(), e_y.max(),a
Out[26]:
(0.316027914617135, 1.0, 1.0)
カラーマップ名をリストに設定¶
In [27]:
Diverging_cmaps = ['PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', 'RdYlBu',\
'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic'] # 0-11
電界のモード関数の極座標成分 $e_\rho$,$e_\phi$,電界の直角座標成分 $e_x$,$e_y$ のプロット¶
In [28]:
fig = plt.figure(figsize=(12, 8)) # グラフ領域の作成
v = np.linspace(-1.0, 1.0, 101)
mycolor1 = Diverging_cmaps[1]# *0(緑,ピンク),1(緑,紫)
mycolor2 = Diverging_cmaps[5]# *3(紫,茶)5, 8,10,11(赤,青)
irho, iphi = 1, 1
#irho, iphi = 0, 0
if irho == 1:
ax = plt.subplot(2,2,1, polar=True)
ax.set_rgrids([0.2, 0.4, 0.6, 0.8, 1], angle=325., fontname="Arial", fontsize=9)
ax = plt.contour(pphi, rrho, e_rho, colors='gray', linewidths=0.4)# 等高線表示
ax.clabel(fmt='%1.1f', inline=1, fontsize=9)# 等高線の値を表示
ax = plt.contourf(pphi, rrho, e_rho, levels=v, cmap=mycolor1)
ax = plt.colorbar(pad=0.1, shrink=1.0, orientation="vertical")
ax.set_label(r"Relative amplitude $e_\rho$", fontname="Arial", fontsize=9)
if iphi == 1:
ax = plt.subplot(2,2,2, polar=True)
ax.set_rgrids([0.2, 0.4, 0.6, 0.8, 1], angle=325., fontname="Arial", fontsize=9)
ax = plt.contour(pphi, rrho, e_phi, colors='gray', linewidths=0.4)# 等高線表示
ax.clabel(fmt='%1.1f', inline=1, fontsize=9)# 等高線の値を表示
ax = plt.contourf(pphi, rrho, e_phi, levels=v, cmap=mycolor1)
ax = plt.colorbar(pad=0.1, shrink=1.0, orientation="vertical")
ax.set_label(r"Relative amplitude $e_\phi$", fontname="Arial", fontsize=9)
if irho == 0 and iphi ==0:
ax = plt.subplot(1,2,1, polar=True)
else:
ax = plt.subplot(2,2,3, polar=True)
ax.set_rgrids([0.2, 0.4, 0.6, 0.8, 1], angle=325., fontname="Arial", fontsize=9)
ax = plt.contour(pphi, rrho, e_x, colors='gray', linewidths=0.4)# 等高線表示
ax.clabel(fmt='%1.1f', inline=1, fontsize=9)# 等高線の値を表示
ax = plt.contourf(pphi, rrho, e_x, levels=v, cmap=mycolor2)
if irho == 0 and iphi ==0:
ax = plt.colorbar(pad=0.1, shrink=1.0, orientation="horizontal")
else:
ax = plt.colorbar(pad=0.1, shrink=1.0, orientation="vertical")
ax.set_label(r"Relative amplitude $e_x$", fontname="Arial", fontsize=9)
if irho == 0 and iphi ==0:
ax = plt.subplot(1,2,2, polar=True)
else:
ax = plt.subplot(2,2,4, polar=True)
ax.set_rgrids([0.2, 0.4, 0.6, 0.8, 1], angle=325., fontname="Arial", fontsize=9)
ax = plt.contour(pphi, rrho, e_y, colors='gray', linewidths=0.4)# 等高線表示
ax.clabel(fmt='%1.1f', inline=1, fontsize=9)# 等高線の値を表示
ax = plt.contourf(pphi, rrho, e_y, levels=v, cmap=mycolor2)
if irho == 0 and iphi ==0:
ax = plt.colorbar(pad=0.1, shrink=1.0, orientation="horizontal")
else:
ax = plt.colorbar(pad=0.1, shrink=1.0, orientation="vertical")
ax.set_label(r"Relative amplitude $e_y$", fontname="Arial", fontsize=9)
plt.tight_layout()
fig.savefig('p3_tlt_s13_3_'+s_mode+'.pdf')
plt.show()
磁界の直角座標成分 $h_x$,$h_y$ のプロット¶
In [29]:
fig, ax = plt.subplots(1,2,figsize=(12, 4)) # グラフ領域の作成
for axi in ax: # 直交 Axes を削除
axi.remove()
v = np.linspace(-1.0, 1.0, 101)
mycolor1 = Diverging_cmaps[1]# *0(緑,ピンク),1(緑,紫)
mycolor2 = Diverging_cmaps[5]# *3(紫,茶)5, 8,10,11(赤,青)
ax[0] = plt.subplot(1,2,1, polar=True)
CS1 = ax[0].contour(pphi, rrho, h_x, colors='gray', linewidths=0.4)# 等高線表示
ax[0].clabel(CS1, fmt='%1.1f', inline=1, fontsize=9)# 等高線の値を表示
CS2 = ax[0].contourf(pphi, rrho, h_x, levels=v, cmap=mycolor2)
#ax = fig.colorbar(CS2, ax=ax[0], pad=0.1, shrink=1.0, orientation="horizontal")
cbar = fig.colorbar(CS2, ax=ax[0], pad=0.1, shrink=1.0, orientation="vertical")
cbar.set_label(r"Relative amplitude $h_x$", fontname="Arial", fontsize=12)
ax[1] = plt.subplot(1,2,2, polar=True)
CS3 = ax[1].contour(pphi, rrho, h_y, colors='gray', linewidths=0.4)# 等高線表示
ax[1].clabel(CS3, fmt='%1.1f', inline=1, fontsize=9)# 等高線の値を表示
CS4 = ax[1].contourf(pphi, rrho, h_y, levels=v, cmap=mycolor2)
#ax = fig.colorbar(CS4, ax=ax[1], pad=0.1, shrink=1.0, orientation="horizontal")
cbar = fig.colorbar(CS4, ax=ax[1], pad=0.1, shrink=1.0, orientation="vertical")
cbar.set_label(r"Relative amplitude $h_y$", fontname="Arial", fontsize=12)
[i.set_rgrids([0.2, 0.4, 0.6, 0.8, 1], angle=325., fontname="Arial", fontsize=9) for i in ax]
fig.tight_layout()
fig.savefig('p3_tlt_s13_5_'+s_mode+'.pdf')
plt.show()
2次元データからカット面の1次元データ(0$^\circ$,45$^\circ$,90$^\circ$面)の切り取り¶
In [30]:
rho2 = -rho[::-1]
rho2 = np.append(rho2, rho)
co_e, co_h, co_45, co_e_db, co_h_db, co_45_db = two_one_dim(e_x)
xx_e, xx_h, xx_45, xx_e_db, xx_h_db, xx_45_db = two_one_dim(e_y)
カット面での電界の直角座標成分 $e_x$,$e_y$ のデシベル値のプロット¶
In [31]:
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 4)) # グラフ領域の作成,nrows=縦に並べる数,ncols=横に並べる数
ax[0].set_title("$E_x$ ("+t_mode+")")
ax[0].set_xlabel(r"Normalized radius $\rho/a$", fontsize=12) # x軸のラベル設定
[ax[j].set_ylim(-40.0, 10.0) for j in range(2)]
[ax[j].set_ylabel("Relative amplitude [dB]", fontsize=12) for j in range(2)]
ax[0].plot(rho2, co_e_db, label="E-plane")
ax[0].plot(rho2, co_h_db, label="H-plane")
ax[0].plot(rho2, co_45_db, label="45-plane")
ax[1].set_title("$E_y$ ("+t_mode+")")
ax[1].set_xlabel(r"Normalized radius $\rho/a$", fontsize=12) # x軸のラベル設定
ax[1].plot(rho2, xx_e_db, label="E-plane")
ax[1].plot(rho2, xx_h_db, label="H-plane")
ax[1].plot(rho2, xx_45_db, label="45-plane")
[ax[j].grid(color = "gray", linestyle="--") for j in range(2)]
[ax[j].minorticks_on() for j in range(2)]
[ax[j].set_xlim(-1.0, 1.0) for j in range(2)]
[ax[j].set_xlabel(r"Normalized radius $\rho/a$", fontsize=12) for j in range(2)]
[ax[j].legend(ncol=1, loc='lower right', fancybox=False, frameon = True, fontsize=12) for j in range(2)]
fig.tight_layout()
fig.savefig('p3_tlt_s13_7_'+s_mode+'.pdf')
plt.show()
In [32]:
# 直角座標系(x,y)
x_min, x_max, n_x = -1.0, 1.0, 101
y_min, y_max, n_y = -1.0, 1.0, 101
x = np.linspace(x_min, x_max, n_x)
y = np.linspace(y_min, y_max, n_y)
xx, yy = np.meshgrid(x,y, indexing='xy')# xy座標の並び (デフォルト)
rrrho = np.sqrt(xx**2+yy**2)
ppphi = np.arctan2(yy,xx)
e_rho, e_phi = circular_waveguide_mode(rrrho,ppphi, a,imode,m,n,xi,ic)
e_x, e_y = rhophi_xy(e_rho,e_phi, ppphi)
emax = np.array([e_x.max(), e_y.max(), e_rho.max(), e_phi.max()])
emaxx = emax.max()
e_x = e_x/emaxx
e_y = e_y/emaxx
x_c, y_c = np.cos(phi), np.sin(phi)
電界のモード関数より電気力線と等高線図を重ねて描くと,¶
In [33]:
fig = plt.figure(figsize=(7, 7)) # グラフ領域の作成
v = np.linspace(0.0, 1.0, 21)
plt.title(t_mode)
e_amp = np.sqrt(e_x**2+e_y**2)
lw = 3.5*e_amp / e_amp.max()
plt.streamplot(xx, yy, e_x, e_y, color='orange', density=0.6, linewidth=lw,
arrowsize=1.2, # 矢印サイズ
broken_streamlines=False) # 線の切断を防ぐ
plt.contourf(x, y, e_amp, levels=v, cmap="Blues")# YlOrRd, OrRd
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.axis('scaled')
plt.colorbar(pad=0.1, shrink=0.77, orientation="vertical")
plt.plot(x_c, y_c, 'grey')
fig.tight_layout()
fig.savefig('p3_tlt_s13_9_'+s_mode+'.pdf')
plt.show()