平板導体の渦電流問題(プログラミング) (10)

ソースコード

1. 薄肉楕円導体 - b.c

V.Belevitch の方法で Zac/Rdc を計算しています。 *p1 には k«1 の近似式、 *p2 には k»1 の近似式の計算値が得られます。

  COMPLEX Zac(double k, COMPLEX *p1, COMPLEX *p2)
	k = j*m
	j = sqrt(-1)
	m = j*ω*μ/(4*π* Rdc)
	Rdc = 1.0/(g*π*a*b)
	g = 導体の導電率 (S/m) .. 電気銅なら 5.80e7
	μ = 導体の透磁率 (H/m) .. 電気銅なら 4e-7π (非磁性)
	a = 楕円の半長軸 (semi-major axis)
	b = 楕円の半短軸 (semi-minor axis)
	ω = 2*π*f .. 角周波数 (rad/s)

下記のグラフは、かなり高い周波数まで計算した結果ですが、 高い周波数では極めて薄い厚さの導体になりますので、 実際に作るのは困難です。

1図 - 薄肉楕円導体の Zac/Rdc

横軸が k の値、縦軸が Zac/Rdc、 黒線が Rac/Rdc、赤線が Rac/Rdc の高周波近似式です。

2. 薄肉平板導体 - H.B.Dweght の多公式近似 f.c

H.B.Dwight の薄い単独平板導体 Edge effect 近似式で Zac/Rdc を計算しています。

  COMPLEX Edge(double a, double c, double u, double g, double f)
	a = 導体幅 (m)
	c = 導体厚 (m)
	u = 透磁率 (H/m)
	g = 導電率 (S/m)
	f = 周波数 (Hz)

この例では幅 100 mm、厚さ 0.5 mm の平板導体(flat conductor)を使っていますが、 幅が広いと商用周波数でも、かなりの損失が発生するのがわかります。

なお、この近似式は低い周波数でしか使えません。 当時は商用電源の交流伝送から 100 kHz 程度の交流しか使えませんでした。 Kennelly の歴史的実験でも高周波発信器は電動モータで駆動する発電機 (Motor-Driven Generator)です。

2図 - 薄肉平板導体の Zac/Rdc

横軸は周波数 (Hz)、縦軸は Rac/Zac です。

3. 平板導体 - 積分方程式数値解法 - i.c

積分方程式の数値解法は平板以外の広範囲の形状に適用できるのですが、 ここでは理解しやすいように、 薄い平板、つまり、 導体の厚さが表皮深さにくらべて十分小さい平板に適用した事例を用意しました。 厚さ方向も分割すれば、 より厚い板材の計算もできますが、 表皮深さの 3 倍を超える厚さになると、 導体内部にはほとんど電流が流れませんから、 中空の角柱として計算すると時間の節約になります。

  COMPLEX busbar(double a, double b, double u, double g, double f)
	a = 0.5 * 導体幅 (m)
	b = 導体厚 (m)
	u = 透磁率 (H/m)
	g = 導電率 (S/m)
	f = 周波数 (Hz)
積分方程式の離散化により薄い平板の Zac/Rdc を計算しています。 ここで必要になる長方形図形の幾何学的平均距離(GMD)
     a
  - +-+       +-+
  | | |       | |
  b | |       | |
  | | |       | |
  - +-+       +-+
     |<---s--->|
の計算には下記の関数が使われています。
  double R1(double a, double b) .. 長方形自体の幾何学的平均距離
  double R2(double a, double b, double s) .. 二つの長方形間の幾何学的平均距離
a = b なら良く知られた正方形の場合になりますが、 この関数を見ると、 一般的図形の幾何学的平均距離の計算が簡単とは言えない ことが良くわかると思います。

逆行列計算には簡単なGaussの方法を使っていますが、 LU 分解を使うほうが効率的です。

  int inverse(int, COMPLEX a[][n], double *pd, double *pe);
	a[][n] = この行列を逆行列に変換して戻ります
	*pd = 行列の行列式を返します
	*pe = 逆変換中の pivot の最小値を返します

なお、 このプログラムでは行列とベクトルを動的に確保していますが、 古い c で、この機能がない場合は、 大域変数などで静的に確保するか、直接 pointer を使う、 あるいは、 pointer の配列を使って、 a[3][5] といったコーディングができるようにします。 (注1)

3図 - 平板導体の Rac/Rdc

板厚 5 mm、板幅 200 mm の単独平板の Rac/Rdc を計算しています。

4. 薄肉隣接平板往復導体 - a.c

H.B.Dwight の方法で隣接平板往復導体の Rac/Rdc を計算しています。 導体の厚さが表皮深さと比べて十分小さくて、 導体間距離が導体厚と比べて十分近くないと使えません。

  COMPLEX Zac(double a, double g, double u, double f)
	a = 導体厚 (m)
	u = 透磁率 (H/m)
	g = 導電率 (S/m)
	f = 周波数 (Hz)

3図 - 薄肉隣接平板導体の Rac/Rdc

Kennelly の実測値と照合するため、 導体厚 1.59 mm、導体幅 38.1 mm、導体間距離 0.5 mm で計算しています。

注1 - c と動的配列

実行時でないと配列のサイズが決まらないことがありますが、 c にはその機能がないため、 a[3][5] を *(a * N + 5) と書いたりします。 この他にも、多少トリッキーですが、例えば

  William H.Press, Saul A.Teukolsky, William T.Vetterling, Brian P.Flannery,-
	Numerical Recipes
	(Cambridge University Press) 
の旧版では、複数の 1 次元配列への pointer を 1 つの 1 次元配列に格納することで、 a[3][5] といったコーディングを可能にしていました。 ただ、最近の版では c++ の動的配列を使うようになっています。

平林 浩一, 2017-07-18