ソフトウェア/OpenFDTD のバックアップ差分(No.5)

更新


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[公開メモ]] &katex();

* OpenFDTD を使ってプリント基板上の高速信号の伝播を理解したい [#v3733737]

例えば4層基板上のマイクロストリップラインの周囲の電場をこんな風に計算するとか。

&ref(microstrip1.png,,50%);
&ref(microstrip2.png,,33%);

** 目次 [#taf6b842]

#contents

** OpenFDTD について [#ta0c33d3]

株式会社 EEM により開発&メンテナンスされていたオープンソースの FDTD シミュレーションソフト。

[[Wikipedia:FDTD法]] は主にマクスウェル方程式を数値的に解いて電磁波のシミュレーションを行う際に使われる数値計算手法の一種。

株式会社 EEM は2022年9月30日に解散したため、現在は大賀さんが個人的に (?) メンテナンスを続けてらっしゃるようです。

** OpenFDTD のダウンロード&説明 [#v73424f6]

以前は http://e-em.co.jp/OpenFDTD にあったのですが、

現在は http://emoss.starfree.jp/ で公開されています。

> 1.1 概要
> 
> (1) 本ソフトウェアについて
> 本ソフトウェアOpenFDTDはFDTD法(Finite Difference Time Domain method)[1][2] を用いた汎用的な電磁界シミュレーターです。 電磁界の広い用途の解析に使用することができます。
> 
> (2) オープンソース
> 本ソフトウェアOpenFDTDはオープンソースのフリーソフトです。 自由にダウンロードしてお使いください。
> 
> (3) 動作環境
> 動作環境はWindowsまたはLinuxです。 Windows環境には簡易GUIと実行プログラムが付属しています。

GPU やクラスターマシン、スーパーコンピュータ用の高速演算コードまで含まれているすばらしいものです。

Windows 用には GUI も提供されていて、モデルの作成や計算結果のグラフ表示が可能です。

* プリント基板 (PCB) のシミュレーションに使うことを想定した注意点 [#k7b22011]

各部のサイズを厳密に設定しなければならならず、セルの大きさ分の誤差が計算結果に影響するため、
FDTD 計算の基本を押さえておかないと計算結果が合わず困ったことになります。
プリント基板 (PCB) のシミュレーションでは各部のサイズを厳密に設定しなければならならず、セルの大きさ分の誤差が計算結果に影響する。

このため、FDTD 計算の基本を押さえておかないと計算結果が合わず困ったことになります。

** FDTD 計算の基本 [#t2a1160b]

FDTD では計算したい空間を「直方体のセル」に分割して計算する。
セルの数を $N_x\times N_y\times N_z$ とする。

「セルの頂点」が格子点 $(x_i,y_j,z_k)$ にあたる。頂点数は $(N_x+1)\times (N_y+1)\times (N_z+1)$ である。

電場・電流はセルの辺に沿って計算され、その際には「辺の中心」が基準点となる。
たとえば $E_x$ を計算するには $(x_i+(x_{i+1}-x_i)/2,y_j,z_k)$ が基準点で、その数は $N_x\times (N_y+1)\times (N_z+1)$ である。

基準点の周りに「その電場が仮定される範囲」が取られる。$x_i<x<x_{i+1},y_j-(y_j-y_{j-1})/2<y<y_j+(y_{j+1}-y_j)/2,z_k-(z_k-z_{k-1})/2<z<z_k+(z_{k+1}-z_k)/2$ がその範囲になるため、セルの範囲とはずれることに注意が必要。特に、隣り合うセルのサイズが異なる場合には「電場セル」の中心が「辺の中心」とは一致しないことにも注意すべき。

磁場・磁流はセルの面に垂直に計算される。面の中心が基準点となる。

** マテリアルの範囲 [#j3fd261d]

誘電体や金属を配置する際、その範囲は「セル単位」ではなく「座標空間内に厳密に設定された範囲」になる。

どういうことかというと、電場や磁場を計算する際、その「基準点」の座標がどこかによって、どのマテリアルのパラメータを使って計算するかが決まる。

FDTD が基礎とする Maxwell 方程式の形は

$$
\frac{\epsilon_r}{c}\partial_t\bm E=\bm\nabla\times\eta\bm H-\underbrace{(\eta\sigma)\bm E}_\text{電流密度項}
$$
$$
\frac{\mu_r}c\partial_t\eta\bm H=-\bm\nabla\times\bm E-\underbrace{(\frac{\sigma_m}\eta)\eta\bm H}_\text{磁流密度項}
$$

で、特に材質によって大きく変わる誘電率 $\epsilon_r$ と伝導率 $\sigma$ は電場の方程式だけに含まれるので、「格子点」ではなくむしろ「辺の中心位置にどの材質が設定されているか」が結果に影響してくるという点に注意が必要なのだ。

FDTD 内の導体は「ジャングルジム」のようなもので、その辺にしか電流は流れない。
物体をおかしなところで切ると、片方の先がどこにもつながっていないような中途半端な辺がたくさん
生えた「毛深い」物体ができてしまう。「毛」はアンテナっぽく働くけれど、毛と毛の間で横方向に
電流が流れないので思ったのと違う動作をしかねない。

また「辺」は「仮想的な太さ」を持つので、全体としての伝導度や抵抗を設計値と合わせたい場合には
その「太さ」を正しく考慮しないと値が異なってしまう。

- OpenFDTD では設定したマテリアルの範囲の「境界上の点」は「マテリアルの内部」として考慮されること、
- 複数のマテリアルに含まれる点は「最後に指定したマテリアル」で上書きされること、

にも注意が必要だ。

** 具体例で考える [#kfb4e75b]

例えば厚さ 1.6 mm の両面基板を考え、裏のグランドプレーンを $z=-1.6\ \text{mm}$ に配置したいとする。

それには任意の $k$ に対して $z_k=-1.6\ \text{mm}$ となるよう格子点を配置して、$z=-1.6\ \text{mm}$ に「厚さゼロ」の完全導体を配置すればよい。

これにより、この面内のメッシュ状の辺が完全導体の特性を持つようになり、この面内で電流が自由に流れるようになる。

辺は「太さ」を持つため、ここに完全導体ではなく有限伝導度の金属を置くなら、その厚さにも注意が必要だ。
この時、導体の厚さは $(z_{k+1}-z_{k-1})/2$ となる。この面が系の端にある場合、例えば $z_0$ にある場合は、$z_{-1}$ は存在しないため代わりに隣までの距離が使われて、$z_1-z_0$ が厚さになる。

この電流による磁場は、本来太さを持つ辺を流れる電流が、あたかも辺の上に集中しているかのように考えて計算されるため、完全導体では $z_k$ における $H_z$ はゼロになる。

同様に、パターン面を $z=0\ \text{mm}$ として、そこに厚さゼロの金属を配置すればそこに電流を流すことができる。

この間を誘電体、例えば FR-4 で埋めるには、グランドプレーンやパターン面の金属を配置する「前に」 $\epsilon_r=4.3$ の材質を $-1.6\ \text{mm}\le z\le 0\ \text{mm}$ に配置すると良い。

グランドプレーンやパターンには「辺の太さ」分だけの仮想的な厚みがあるが、誘電体内で $E_z$ を計算する際にはその金属板の厚みは考慮されない。例えば $z_{k+1/2}$ にある $z$ 方向に向く辺は正しく $z_k$ から $z_{k+1}$ までの長さを持つ。つまりグランドプレーンの仮想的な厚さを無視して $z_k$ まで突き刺さっていて、その計算に誘電体の誘電率と伝導率が使われるのだ。

だから、$z_k<z<z_{k+1/2}$ の範囲は面内の電場を計算するときには金属、面直の電場を計算するときには誘電体であるように扱われる不思議領域になる。そこが問題になるなら、金属面のすぐ隣の面までの面間隔を小さくすることで影響を最小化できるはず。

パターンの太さを考えるときも十分注意しなければならない。格子点から格子点までの長さをピッタリパターンの太さに合わせ、両端の格子点を含む形でパターンに対応する金属領域を設定するのが、金属の形状を定義してそのまわりの誘電体内の電場を計算するには最適と思われるが、そのときパターンの幅は辺の仮想的な太さ分だけ設定領域をはみ出すので、パターンに抵抗率を設定する場合にはその分だけ抵抗が下がってしまう。

影響を減らすにはやはり、パターンの外周のすぐ外の格子面までの距離を十分に小さくとるしかないのだと思う。

* 計算例 [#m6251b49]

- [[ソフトウェア/OpenFDTD/マイクロストリップライン]]
- [[ソフトウェア/OpenFDTD/固定端・解放端]]
- [[ソフトウェア/OpenFDTD/50Ω終端]]
- [[ソフトウェア/OpenFDTD/パッドを作って素子を載せる]]


Counter: 4755 (from 2010/06/03), today: 1, yesterday: 0