またまた、温泉に行ってきた。 例によって、温泉宿に直行して1泊して直帰。 どこにも寄り道しない。 朝湯、朝ビール、朝コーヒーを楽しむ。 朝早く目が覚めてしまうので、朝寝はできない。 行く宿は2軒しかない。 今回は、Aの方へ。 食事は、ほぼ同じだけど、月毎に微妙に変わる。 こんな楽しみ方をしばらく続けるつもり。
で、FDTDの続き。 電界、磁界が計算できているか確かめたいので、電流源を導入して、実際に電界や磁界を計算してみたい。
電流源は、電界の式に追加する。
$$ \frac{\partial \bf E}{\partial t} = – \frac{\sigma}{\varepsilon} \bf E + \frac{1}{\varepsilon} \nabla \times \bf H – \frac{1}{\varepsilon} \bf J $$
これを時間領域で離散化すると、
$$ \bf{ E^n } = \frac{1 – \frac{\sigma\Delta t}{2\varepsilon}}{1 + \frac{\sigma\Delta t}{2\varepsilon}} \bf{E^{n-1}} + \frac{\frac{\Delta t}{\varepsilon}}{1 + \frac{\sigma\Delta t}{2\varepsilon}} \nabla \times \bf{H^{n-1/2}} – \frac{1}{\varepsilon}\bf{J^{n-1/2}} $$
と、ここまでは教科書に書いてあるけど、どうコーディングするかは書いてない。
そこで、とりあえず、解析領域中央に、Z軸方向に正弦振動する電流密度を直接与えることにする。
EZに電流源を加えればよいから、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
float dt; //タイムステップ float freq; //周波数 float[] epsilon; // 誘電率 float[] sigma; //導電率 //電流源 private void current_source( float t) { int i = nx / 2; int j = ny / 2; int k = nz / 2; int id = idez[i, j, k]; Ez[i, j, k] = Ez[i, j, k] - (dt * (float)Math.Sin(2 * (float)Math.PI * freq * t)) / ( epsilon[id] * ( 1 + sigma[id] / (2 * epsilon[id]))); } |
ちょっと自信ないけど、これで境界条件なしで電磁界を計算してみる。