5.2 プログラム実行

5.2.1 プログラム実行法

OpenFDTDの処理の流れは図5-2-1のように2通りあります。
左は計算とポスト処理を分けて行う方法であり、 右は計算とポスト処理を一括して行う方法です。
処理時間は計算>>ポスト処理ですので、 左の方法を使用するとポスト処理の条件を変えてポスト処理を繰り返し行うことができます。 ただし左の方法では計算結果ファイルofd.outが必要になり、 これは全領域の電磁界を含んでいますので大きなサイズのファイルの読み書きが必要になります。


図5-2-1 OpenFDTDの処理の流れ

OpenFDTDには使用された高速化技術によっていくつかの実行プログラムがあります。
それらは実行方法と計算時間は異なりますが、計算機能は同じですので、 同じ計算結果が得られます。
プログラムを実行するにはコマンドラインで下記のコマンドを実行してください。
ここで行頭の>はプロンプトであり入力する必要はありません。
<>内には適当な数値を代入してください。
[]内はオプションであり省略可能です。
|で区切られた部分は一つを選択してください。
"入力データ"は次節で説明するテキストファイルであり必須です。
コマンドラインの操作方法はWindowsとLinuxで同じです。

(1)OpenMPを使用するとき

> ofd [-solver|-post] [-n <thread>] [-geom] [-ev] 入力データ
例えば以下のようになります。
> ofd -solver 入力データ   (計算を行いますがポスト処理を行いません。計算結果がofd.outに出力されます。1スレッド)
> ofd -post 入力データ    (ofd.outを読み込んでポスト処理を行います。1スレッド)
> ofd 入力データ      (計算に続いてポスト処理を行います。ofd.outは出力しません。1スレッド)
> ofd -n 4 入力データ    (同上、4スレッド)
> ofd -geom 入力データ   (物体形状をgeom3d.htmに出力し計算は行いません)
> ofd -ev 入力データ   (ポスト処理の図形出力が独自フォーマットのファイルev.ev2とev.ev3になります。Windows専用)
> ofd --help        (使い方の説明)

(2)MPI+OpenMPを使用するとき

1台のとき:
> mpiexec -n <process> ofd_mpi [-solver] [-n <thread>] [-ev] 入力データ
複数台のとき:
> mpiexec -hosts <num> ホスト名 プロセス数 ... ofd_mpi [-solver] [-n <thread>] 入力データ
例えば以下のようになります。(注1)(注2)(注3)
> mpiexec -n 1 ofd_mpi -solver 入力データ   (計算を行いますがポスト処理を行いません。計算結果がofd.outに出力されます)
> mpiexec -n 1 ofd_mpi 入力データ    (計算に続いてポスト処理を行います。ofd.outは出力しません。1台、1プロセス、1スレッド)
> mpiexec -n 4 ofd_mpi 入力データ    (1台、4プロセス、1スレッド)
> mpiexec -n 2 ofd_mpi -n 2 入力データ    (1台、2プロセス、2スレッド)
> mpiexec -hosts 2 localhost 6 PC2 4 ofd_mpi 入力データ  (2台、6+4プロセス、1スレッド)
> ofd_mpi --help        (使い方の説明)

(3)CUDAを使用するとき

> ofd_cuda [-solver] [-hdm|-um] [-device <device>] [-ev] 入力データ
例えば以下のようになります。
> ofd_cuda -solver 入力データ   (計算を行いますがポスト処理を行いません。計算結果がofd.outに出力されます)
> ofd_cuda 入力データ   (計算に続いてポスト処理を行います。ofd.outは出力しません。)
> ofd_cuda -hdm 入力データ   (host-device-memoryを使用する:既定値)
> ofd_cuda -um 入力データ   (unified-memoryを使用する)
> ofd_cuda -device 0 入力データ   (デバイス番号=0:既定値)(注4)(注5)
> ofd_cuda --help        (使い方の説明)

(4)CUDA+MPIを使用するとき

●1台のコンピュータに複数のグラフィックスボードがあるとき
> mpiexec -n <num> ofd_cuda_mpi [-solver] [-hdm|-um] [-ev] 入力データ
例えば以下のようになります。(注1)(注3)(注5)
> mpiexec -n 2 ofd_cuda_mpi 入力データ   (1台のコンピュータに2個のグラフィックスボード)(注6)
> ofd_cuda_mpi --help        (使い方の説明)

●複数台のコンピュータのとき(それぞれのコンピュータには一つまたは複数のグラフィックスボード)
すべてのコンピュータでコマンドプロンプトを起動して
> smpd -p 8677
を実行した後、ルートコンピュータ(ユーザーがメインで使用するコンピュータ)で以下を実行します。
> mpiexec -hosts <num> ホスト名 プロセス数 ... ofd_cuda_mpi -hosts ホスト数 プロセス数 ... [-solver] [-hdm|-um] [-ev] 入力データ
例えば以下のようになります。(注1)(注2)(注3)(注5)
> mpiexec -hosts 2 localhost 1 PC2 1 ofd_cuda_mpi -hosts 2 1 1 入力データ  (2台のコンピュータにそれぞれ1個のグラフィックスボード)(注7)

(注1)初回にセキュリティソフトが警告を出したら許可してください。(MPIは複数のプロセスを起動しますのでマルウェアと認識されることがあります)
(注2)複数台のコンピュータで計算する方法については[3]を参考にしてください。
(注3)mpiexecの詳細についてはコマンド"mpiexec -help"または"mpiexec -help2"を参考にしてください。
(注4)通常はデバイス番号は0です。何らかのメッセージが出て実行できないときはデバイス番号を変えてみてください。
(注5)デバイス番号については下記のページの「2.4 グラフィックスボードのデバイス番号」を参考にしてください。
http://www.e-em.co.jp/gpu/gpu.htm
(注6)順にデバイス番号0,1,...を使用します。
(注7)後の方の-hostsの後の数字は最初の方の-hostsの引数から数字のみを取り出したものです。MPIのランクとデバイス番号の対応を取るために必要になります。
(注8)引数-solverをつけると計算を行いますがポスト処理を行いません。計算結果がofd.outに出力されます。 引数-postをつけるとofd.outを読み込んでポスト処理を行います。 引数-solverも-postもないときは計算に続いてポスト処理を行います。ofd.outは出力しません。 ただし、ポスト処理は処理時間が短いので高速化を行っていない"ofd -post 入力データ"で十分です。

5.2.2 標準出力

計算が行われるとリスト5-2-1のような標準出力が行われます。
それぞれの意味は下記の通りです。
入力データに間違いがあるときはメッセージを出して計算が終了します。


リスト5-2-1 標準出力
<<< OpenFDTD (CPU+OpenMP) Ver.2.5.3 >>>	実行プログラムとそのバージョン
Thread = 4, Process = 1			スレッド数とプロセス数、GPUのときはGPU情報
Mon May 25 14:25:01 2020		開始時刻
Title = dipole antenna			タイトル
Source = feed				波源:給電点または平面波入射
Cells = 30 x 30 x 31 = 27900		セル数
No. of Materials  = 3			物性値の数(空気/PECを含む)
No. of Geometries = 1			物体形状の数
No. of Feeds      = 1			給電点の数
No. of Points     = 0			観測点の数
No. of Freq.s (1) = 11			第1周波数の数
No. of Freq.s (2) = 1			第2周波数の数
No. of Near1d.s   = 1			近傍界観測線の数
No. of Near2d.s   = 1 + 6 = 7		近傍界観測面の数(遠方界を指定したときは第2項の2番目が6になる)
No. of Far1d.s    = 1			遠方界計算面の数
Far2d (0/1)       = 1			全方向遠方界を計算するか
CPU Memory size   = 2 [MB]		使用メモリー
ABC = Mur-1st				吸収境界条件
Dt[sec] = 9.3089e-12, Tw[sec] = 5.0800e-10, Tw/Dt = 54.572	Δt[sec]、パルス幅[sec]、比
Iterations = 1000, Convergence = 1.000e-03	最大反復回数、収束判定条件
=== iteration start ===				反復計算開始
   step   <E>      <H>				タイムステップ、平均電界、平均磁界
      0 0.000000 0.000000
    100 4.957039 3.894716
    200 0.958860 0.874313
    300 0.188227 0.169974
    400 0.040359 0.034269
    500 0.006611 0.006112
    600 0.001508 0.001271
   --- converged ---				収束したことを表す
=== input impedance ===				入力インピーダンス/入力アドミッタンス/反射係数
feed #1 (Z0[ohm] = 50.00)			給電点の特性インピーダンス
  frequency[Hz]    Rin[ohm]    Xin[ohm]     Gin[mS]     Bin[mS]     Ref[dB]
    2.00000e+09      34.646    -104.563       2.855       8.618      -2.096
    2.10000e+09      40.377     -81.766       4.855       9.832      -3.407
    2.20000e+09      46.789     -60.063       8.072      10.361      -5.547
    2.30000e+09      53.946     -39.196      12.132       8.815      -9.005
    2.40000e+09      61.946     -19.080      14.744       4.541     -14.057
    2.50000e+09      70.949       0.435      14.094      -0.086     -15.227
    2.60000e+09      81.178      19.248      11.663      -2.765     -11.170
    2.70000e+09      92.714      37.261       9.286      -3.732      -8.307
    2.80000e+09     105.606      54.159       7.497      -3.845      -6.537
    2.90000e+09     119.554      69.875       6.235      -3.644      -5.391
    3.00000e+09     134.375      84.357       5.338      -3.351      -4.606
=== output files ===
ofd.log, geom3d.htm, ev2d.htm, ev3d.htm	出力されたファイル名
=== cpu time [sec] ===			以下計算時間の内訳
  part-1 :       0.165			FDTD法の反復計算部分
  part-2 :       0.137			それ以外
  --------------------
  total  :       0.302			合計計算時間
=== normal end ===			計算が正常終了したことを表す
Mon May 25 14:25:01 2020		終了時刻

5.2.3 図形出力

計算が終了すると以下の図形ファイルが出力されます。
ただし、geom3d.htmは計算の最初に出力されていますので、 計算の途中でも入力データを確認することができます。
それらの意味と見方は5.4を参考にして下さい。

  1. geom3d.htm : 入力データの物体形状の3D表示

ポスト処理が終了すると以下の図形ファイルが出力されます。
それらの意味と見方は5.4, 5.5を参考にして下さい。

  1. ev2d.htm : 2次元図形出力(収束状況、周波数特性、遠方界面上、近傍界線上、近傍界面上)
  2. ev3d.htm : 3次元図形出力(遠方界全方向、近傍界面上)

(注意)
実行プログラムに引数"-ev"をつけると上のファイルの代わりにev.ev2,ev.ev3が出力されます。 これらは独自フォーマットでありWindowsのビューワーev2d.exe,ev3d.exeが必要です。 WindowsのGUI用です。

5.2.4 数値出力

計算が終了すると以下の数値ファイルが出力されます。
それらの意味は5.6を参考にして下さい。

  1. ofd.log : 標準出力と同じもの

ポスト処理が終了すると以下の数値ファイルが出力されます。
それらの意味は5.6を参考にして下さい。

  1. feed.log : 給電点
  2. point.log : 観測点
  3. far0d.log : 遠方界点
  4. far1d.log : 遠方界面上
  5. far2d.log : 遠方界全方向
  6. near1d.log : 近傍界線上
  7. near2d.log : 近傍界面上