ダウンロード
このちょっとしたワークベンチは、最も危うい場所——「一見正しく見える」Excelのスプレッドシート——から生まれました。物理法則がやんわりと「それは違う」と教えてくれるまでは、ですが。ここで公開しているのは、その実験を整理し直したJavaベースの発展形です。2次元バードケージコイルの差分法モデルとして磁気ベクトルポテンシャルを解き、得られたB場をいくつかの方法で可視化します。
スプレッドシートからワークベンチへ
元々のモデルはExcel上でのスカラーポテンシャルによる差分法(FDM)でした。実験用としては十分でしたが、実は静電界の世界——電流ではなく電荷、回転(curl)ではなく勾配(gradient)——を暗黙のうちに前提としていました。目的がMRI用バードケージコイルのモデル化に変わった時点で、物理的にアップグレードが必要になりました。
- スカラーポテンシャルφから磁気ベクトルポテンシャルAzへ切り替えし、電流駆動の場を扱えるようにする。
- グリッドの端を「折り返す」ことでノイマン境界条件/吸収境界条件を導入する。
- 境界が中央の解に悪影響を及ぼさないよう行列サイズを大きくする。
こうして出来上がったのがこのBirdcage FDM Workbenchです。1000×1000のグリッド、調整可能なバードケージ直径とラング(rung)数、複数の可視化表示、そして触って楽しめる程度にはUIも整えてあります。
理論的背景 – バードケージにおける差分法
1. 基礎となる偏微分方程式
電気的(スカラー)定式化:
∇²φ = -ρ / ε E = -∇φ
磁気的(ベクトル)定式化(本ツールで採用):
∇²A = -μ₀ J B = ∇ × A
このワークベンチでは、z方向に電流が流れる2次元断面を仮定しているため、ゼロでないのはAz(x, y)のみです。これによりベクトルのポアソン方程式はAzに関するスカラーのポアソン方程式に帰着しますが、物理的には依然として磁気的な問題です。すなわち、源(source)は電荷ではなく電流であり、着目する場はEではなくBです。
2. ラプラシアンの離散化
間隔 Δx = Δy = DX の一様グリッド上では、2次元ラプラシアンは次のようになります:
∇²A_z(i,j) ≈ [A_z(i+1,j) + A_z(i-1,j) + A_z(i,j+1) + A_z(i,j-1) - 4 A_z(i,j)] / DX²
各内部ノードにおける離散ポアソン方程式は次の通りです:
A_z(i+1,j) + A_z(i-1,j) + A_z(i,j+1) + A_z(i,j-1) - 4 A_z(i,j) = -μ₀ J_z(i,j) DX²
これをSOR法(逐次過緩和法)により反復的に解き、偏微分方程式と境界条件の両方を満たす自己無撞着な解に収束するまでAzを更新していきます。
3. Az から B、|B| へ
Azのみがゼロでない場合、磁場は次のように表せます:
B_x = ∂A_z / ∂y B_y = -∂A_z / ∂x
中心差分を用いると:
B_x(i,j) ≈ [A_z(i, j+1) - A_z(i, j-1)] / (2 DX) B_y(i,j) ≈ -[A_z(i+1, j) - A_z(i-1, j)] / (2 DX) |B|(i,j) = sqrt(B_x² + B_y²)
これが |B| タブと3D |B| 曲面表示に表示される内容です。すなわち、グリッド全体にわたってサンプリングした、Azのcurl(回転)の大きさです。
電気的FDM と 磁気的FDM – 何が本質的に変わるのか
| 観点 | 電気的FDM(スカラーφ) | 磁気的FDM(ベクトルA) |
|---|---|---|
| 未知数 | スカラーポテンシャル φ(x, y) | ベクトルポテンシャル A(x, y)。ここでは Az(x, y) に帰着 |
| 源(ソース)項 | 電荷密度 ρ | ラング(rung)に沿った電流密度 Jz |
| 場の導出 | E = -∇φ(勾配) | B = ∇ × A(回転) |
| 代表的な境界条件 | ディリクレ条件(φ固定)、ノイマン条件(絶縁) | ノイマン/吸収境界(開放空間)、PEC上ではディリクレ条件になることも |
| 形状への感度 | 電荷は点や体積として存在 | 電流は経路(ラング、ループ)上に存在 |
| 角度方向の構造 | 重要でないことが多い | 本質的に重要 – バードケージモードはリング周りのcos/sin分布 |
| 「何かおかしい」となる典型例 | ポテンシャルは滑らかに見えるが境界の物理と整合しない | 境界や電流位相の誤りにより |B| が歪んで見える |
境界条件、非線形性、そして「なぜこんなに変な場になるのか」
端を折り返すことによるノイマン境界/吸収境界条件
有限のグリッドには端がありますが、現実の世界にはありません。境界でAzを単純にゼロに固定してしまうと、人工的な導体箱を作ってしまい、場が領域内に反射して戻ってきます。ここで使っている対策は、シンプルなノイマン境界/吸収境界条件です:
// top and bottom Az[i][0] = Az[i][1]; Az[i][NY - 1] = Az[i][NY - 2]; // left and right Az[0][j] = Az[1][j]; Az[NX - 1][j] = Az[NX - 2][j];
こうして端を「折り返す」ことで法線方向の微分がほぼゼロになり、場が大きく跳ね返ることなく領域の外へ抜けていくようになります。完璧な吸収境界条件ではありませんが、シンプルで頑健であり、バードケージの実験用途には十分です。
行列サイズと境界の「圧政」
初期のバージョンでは比較的小さな行列を使っていました。バードケージ自体は問題なさそうに見えましたが、境界が近すぎて中央部の場を歪めてしまっていました。対策はシンプルですが、避けては通れないものでした:
- 行列を大きくする(1000×1000)。
- バードケージの直径がグリッド幅の1/4以下になるよう、DXを自動的に選択する。
コイルが余裕を持って領域の「内側」に収まると、中央部は自由空間のように振る舞うようになり、|B| の分布はようやく教科書通りの姿になります。
反復ソルバーと「試して、直して、繰り返す」という作法
このプロジェクト全体は、差分法によるモデリングが本質的に2つの意味で「反復的」であることを改めて教えてくれます:
- 数値的に: SOR法は解が収束するまで反復計算を行います。
- 概念的に: ポテンシャルの定式化、境界条件、グリッドサイズなど、モデルそのものを物理と数値計算が一致するまで何度も見直すことになります。
最初のExcel版も、数字ときれいな色を出力するという意味では「動いて」いました。Java版ワークベンチは、得られる場が物理的に意味を持ち、安定していて解釈可能であるという意味で「動いて」います。その両者のギャップにこそ、すべての学びが詰まっています。
このワークベンチで見られるもの
- Azタブ: グリッド全体における磁気ベクトルポテンシャルAz。
- |B|タブ: Azから導かれる磁場の大きさ。
- Linearityタブ: 均一性を確認するための、中心線に沿った|B|の正規化断面プロット。
- 3D |B|タブ: シェーディングと等高線状の縁取りを施した、回転可能な|B|の3D曲面表示。
ラング数の変更、バードケージ直径の調整、カラーマップの切り替え、OFF形式でのジオメトリ書き出し、任意の表示のPNG保存が行えます。内部で行っているのは結局のところグリッド上の差分計算に過ぎませんが、物理の様子を目に見える形にし、トレードオフを実感できるだけのつまみ(パラメータ)は揃っています。