5.2 プログラム実行

5.2.1 プログラム実行法

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


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

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

(1)OpenMP+SIMDを使用するとき

> ofd_omp_simd [-solver|-post] [-n <thread>] [-nosimd|-sse|-avx] 入力データ
例えば以下のようになります。
> ofd_omp_simd -solver 入力データ   (計算を行いますがポスト処理を行いません。計算結果がofd.outに出力されます)
> ofd_omp_simd -post 入力データ    (ofd.outを読み込んでポスト処理を行います)
> ofd_omp_simd 入力データ      (計算に続いてポスト処理を行います。ofd.outは出力しません。1スレッド、SIMDなし)
> ofd_omp_simd -n 6 入力データ    (6スレッド、SIMDなし)
> ofd_omp_simd -sse 入力データ    (1スレッド、SSE使用)
> ofd_omp_simd -n 4 -avx 入力データ  (4スレッド、AVX使用)
> ofd_omp_simd -geom 入力データ   (物体形状をgeom3d.htmに出力し計算は行いません)
> ofd_omp_simd --help        (使い方の説明)

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

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

(3)CUDAを使用するとき

> ofd_cuda [-solver] [-hdm|-um] [-device <device>] 入力データ
例えば以下のようになります。
> 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] 入力データ
例えば以下のようになります。(注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] 入力データ
例えば以下のようになります。(注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+SIMD) Ver.2.1.0 >>>	実行プログラムとそのバージョン
Thread = 1, Process = 1, SIMD = NO		スレッド数、プロセス数、SIMD(GPUのときはGPU情報)
Sun Dec 10 16:29:00 2017			開始時刻
Title = dipole antenna				タイトル
Cells = 20 x 20 x 31 = 12400			セル数
No. of Materials  = 3				物性値の数(空気/PECを含む)
No. of Geometries = 1				幾何形状の数
No. of Feeds      = 1				給電点の数
No. of Freq.s (1) = 6				第1周波数の数
No. of Freq.s (2) = 1				第2周波数の数
No. of Points     = 0				Sパラメーター用観測点の数
No. of Near1d.s   = 1				近傍界観測線の数
No. of Near2d.s   = 1 + 6 = 7			近傍界観測面の数(遠方界を指定したときは第2項の2番目が6になる)
No. of Far fields = 1				遠方界計算面の数
Memory size [MB]  = 1				使用メモリー
ABC = Mur-1st						吸収境界条件
Dt = 9.3089e-012, Tw = 5.0800e-010, Tw/Dt = 54.572	Δt[sec]、パルス幅[sec]、比
Iterations = 1000, Convergence = 1.000e-003		最大反復回数、収束判定条件
=== iteration start ===				反復計算開始
  step   <E>      <H>				タイムステップ、平均電界、平均磁界
     0 0.000000 0.000000
   100 6.419637 4.058073
   200 0.960879 1.038262
   300 0.235826 0.146301
   400 0.034985 0.037813
   500 0.008597 0.005335
   600 0.001275 0.001377
--- converged					収束したことを表す
=== input impedance ===				入力インピーダンス/入力アドミッタンス/反射損失
feed #1 (Z0[ohm] = 50.00)			給電点の特性インピーダンス
  freq[Hz]     Rin[ohm]    Xin[ohm]     Gin[mS]     Bin[mS]    R.L.[dB]
 2.000e+009      36.496    -110.273       2.705       8.173      -2.018
 2.200e+009      46.133     -66.395       7.058      10.157      -4.894
 2.400e+009      58.635     -25.243      14.388       6.194     -12.424
 2.600e+009      74.724      14.034      12.927      -2.428     -12.898
 2.800e+009      95.368      52.010       8.082      -4.408      -6.993
 3.000e+009     122.065      88.976       5.350      -3.900      -4.567
=== output files ===
ofd.log, geom3d.htm, ev2d.htm			出力されたファイル名
=== normal end ===				計算が正常終了したことを表す
Sun Dec 10 16:29:00 2017			終了時刻
cpu time = 0.304 [sec]				計算時間

5.2.3 図形出力

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

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

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

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

5.2.4 数値出力

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

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

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

  1. far1d.log : 遠方界面上
  2. far2d.log : 遠方界全方向
  3. near1d.log : 近傍界線上
  4. near2d.log : 近傍界面上