3相交流の送電線の磁場解析

# はじめに
送電線に交流電流が流れるとその周りに大きさが、変化する磁界が生じる。その磁界によって通信線などが誘導されて誘導電圧がファラデーの法則によって生じてしまう場合がある。そこで、今回は3相交流電流を3本の送電線に流すことで生じる磁界の分布についてアニメ化してシミュレートする。

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/ce82fd48-cf11-030d-32cf-52c5f8ed821a.gif)

# 問題設定
平成24年電験一種の二次試験、電力・管理の問二をモデルとした。
詳細な問題情報などは電験王様を参照されたい。

https://denken-ou.com/c1/denryokukanrih24-2/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/099b3256-54c3-e3db-80a1-09431055f84f.png)

ただし、$U,V,W$相に流れる電流は3相電流として、相順は$U,V,W$とした。この条件の下で、$xy$平面の磁束密度$B(t,x,y)$を求め、図示する。そこで、以下の様なアルゴリズムを考えた。

# アルゴリズム
まず、前提として$z$方向に伸びる送電線の座標を複素数の直交座標で表す。そしてそれを等間隔に3、本横に並べて3相交流電流を流す。
一定電流が流れている銅線の磁場の分布を表すプログラムは以下の記事のプログラムを用いた。

https://qiita.com/arairuca/items/6f7a1f3ccfaadea51570

# プログラム
そこで、以下の様なプログラムを作成した。ただし、時間$t$に対する変化を見たかったので、matplotlib.animationを用いた。

```python 3phase_B.py
"""
画面垂直方向に伸びる3本の導線に流れる3相電流により生じる磁場をシミュレーションするプログラム
"""
import numpy as np
import matplotlib.pyplot as plt
import math
import japanize_matplotlib
import matplotlib.animation as animation
fig = plt.figure()
ims = []
#グリッドの作成
LX, LY=10,10
gridwidth=0.1
X, Y= np.meshgrid(np.arange(-LX, LX, gridwidth), np.arange(-LY, LY,gridwidth)) 
#送電線の座標設定
h=5.0
d=1
# 電流の設定(最大値)
I=10 *(2)**0.5 #電流の絶対値
f=5
omega=2*math.pi*f
# シミュレーション時間
num=10
t=np.linspace(0,1,num)
#真空の透磁率
myu=4*math.pi*10*(-7)

#導線の位置(U相)
x_u,y_u=-d,h 
z1=x_u+1j*y_u
#導線の位置(V相)
x_v,y_v=0,h 
z_v=x_v+1j*y_v
#導線の位置(W相)
x_w,y_w=d,h 
z_w=x_w+1j*y_w
#一本の銅線に働く磁場を求める関数
def H_ary(I,x_k,y_k):
  #複素数(complex)対応にしておく
  H=np.zeros((len(X),len(X)),dtype=complex)
  plt.plot(x_k,y_k,'o',color='blue')
  for i in range(len(X)):
      for k in range(len(X)):
          x=X[i][k]
          y=Y[i][k]
          z=x+1j*y
          z_1=z-(x_k+1j*y_k)
          H[i][k]=I/(2*math.pi*abs(z_1))*((-1j)*z_1/abs(z_1))
  return H

def update(p):
    if p != 0:
        plt.cla()  # 現在描写されているグラフを消去
    I_u=I*np.sin(omega*t[p]-2*math.pi/3)
    I_v=I*np.sin(omega*t[p])
    I_w=I*np.sin(omega*t[p]+2*math.pi/3)
    H_sum=H_ary(I_u,x_u,y_u)+H_ary(I_v,x_v,y_v)+H_ary(I_w,x_w,y_w)
    B_sum=H_sum*myu
    U=B_sum.real
    V = B_sum.imag
    plt.streamplot(X,Y,U,V,color="red",linewidth=0.5,density=2)
ani = animation.FuncAnimation(fig, update,  \
    interval = 100, frames = num)
ani.save("Sample.gif", writer = 'imagemagick')
```

これを実行すると以下の様な動画ファイル(gif)が生成される。

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/ce82fd48-cf11-030d-32cf-52c5f8ed821a.gif)

このように、磁束密度の中心が高速で3相の送電線を移り変わるように変化する。

# 磁場の影響の低減策
3相平衡負荷において送電線の周りに生じる磁場の合計の影響を少なくするためには、正三角形になるように送電線を平衡させればよい。したがって、以下の様なプログラムを作成する。

```python 3phase_B_delta.py
"""
画面垂直方向に伸びる3本の導線に流れる3相電流により生じる磁場をシミュレーションするプログラム
"""
import numpy as np
import matplotlib.pyplot as plt
import math
import japanize_matplotlib
import matplotlib.animation as animation
fig = plt.figure()
ims = []
#グリッドの作成
LX, LY=10,10
gridwidth=0.1
X, Y= np.meshgrid(np.arange(-LX, LX, gridwidth), np.arange(-LY, LY,gridwidth)) 
#送電線の座標設定
r=1.0
# 電流の設定(最大値)
I=10 *(2)**0.5 #電流の絶対値
f=5
omega=2*math.pi*f
# シミュレーション時間
num=10
t=np.linspace(0,1,num)
#真空の透磁率
myu=4*math.pi*10*(-7)

#導線の位置(U相)
x_u,y_u=r*np.cos(math.pi/6),r*np.sin(math.pi/6)
z1=x_u+1j*y_u
#導線の位置(V相)
x_v,y_v=r*np.cos(-math.pi/2),r*np.sin(-math.pi/2) 
z_v=x_v+1j*y_v
#導線の位置(W相)
x_w,y_w=r*np.cos(5*math.pi/6),r*np.sin(5*math.pi/6)
z_w=x_w+1j*y_w
#一本の銅線に働く磁場を求める関数
def H_ary(I,x_k,y_k):
  #複素数(complex)対応にしておく
  H=np.zeros((len(X),len(X)),dtype=complex)
  plt.plot(x_k,y_k,'o',color='blue')
  for i in range(len(X)):
      for k in range(len(X)):
          x=X[i][k]
          y=Y[i][k]
          z=x+1j*y
          z_1=z-(x_k+1j*y_k)
          H[i][k]=I/(2*math.pi*abs(z_1))*((-1j)*z_1/abs(z_1))
  return H

def update(p):
    if p != 0:
        plt.cla()  # 現在描写されているグラフを消去
    I_u=I*np.sin(omega*t[p]-2*math.pi/3)
    I_v=I*np.sin(omega*t[p])
    I_w=I*np.sin(omega*t[p]+2*math.pi/3)
    H_sum=H_ary(I_u,x_u,y_u)+H_ary(I_v,x_v,y_v)+H_ary(I_w,x_w,y_w)
    B_sum=H_sum*myu
    U=B_sum.real
    V = B_sum.imag
    plt.streamplot(X,Y,U,V,color="red",linewidth=0.5,density=2)
ani = animation.FuncAnimation(fig, update,  \
    interval = 100, frames = num)
ani.save("Sample_delta.gif", writer = 'imagemagick')
```

![Sample_delta.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/2bf8bba9-a66a-f29f-1c7e-38dac656520d.gif)

このように、誘導機の回転磁界のような磁場の分布になる。このように平衡している場合は、3本の送電線が周囲に与える影響が最も少なくなると考えられる。


# まとめ
今回は、3相送電線の電流によって生じる磁場の分布をPythonを用いてアニメ化してシミュレートした。このように、3相平衡電流では磁束密度の分布は綺麗な模様になることが分かる。

# 参考文献

グラフからアニメーションを作る方法

https://qiita.com/AnchorBlues/items/3acd37331b12e844d259