4.2 プログラム実行

4.2.1 プログラム実行法

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


図4-2-1 OpenTHFDの処理の流れ

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

(1)OpenMPを使用するとき

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

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

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

(3)CUDAを使用するとき

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

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

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

●複数台のコンピュータのとき(それぞれのコンピュータには一つまたは複数のグラフィックスボード)
すべてのコンピュータでコマンドプロンプトを起動して
> smpd -p 8677
を実行した後、ルートコンピュータ(ユーザーがメインで使用するコンピュータ)で以下を実行します。
> mpiexec -hosts <num> ホスト名 プロセス数 ... oth_cuda_mpi -hosts ホスト数 プロセス数 ... [-solver] [-hdm|-um] [-ev] 入力データ
例えば以下のようになります。(注1)(注2)(注3)(注5)
> mpiexec -hosts 2 localhost 1 PC2 1 oth_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をつけると計算を行いますがポスト処理を行いません。計算結果がoth.outに出力されます。 引数-postをつけるとoth.outを読み込んでポスト処理を行います。 引数-solverも-postもないときは計算に続いてポスト処理を行います。oth.outは出力しません。 ただし、ポスト処理は処理時間が短いので高速化を行っていない"oth -post 入力データ"で十分です。

4.2.2 標準出力

計算が行われるとリスト4-2-1のような標準出力が行われます。
それぞれの意味は下記の通りです。
入力データに間違いがあるときはメッセージを出して計算が終了します。
計算の途中に残差と電界平均が表示されます。 前者が十分小さくなり、後者が一定になったとき収束したとみなされます。
MPI使用時に表示される使用メモリーはプロセス当たりの使用メモリーです。 全体の使用メモリーはこの数字にプロセス数をかけたものです。


リスト4-2-1 標準出力
<<< OpenTHFD (CPU+OpenMP) Ver.1.3.0 >>>		実行プログラムとそのバージョン
Thread = 4					スレッド数、プロセス数(GPUのときはGPU情報)
Sun Dec  1 15:56:05 2019			開始時刻
Title = dipole antenna				タイトル
Cells = 30 x 30 x 31 = 27900			セル数
No. of Materials   = 3				物性値の数(空気/PECを含む)
No. of Geometries  = 1				物体の数
No. of Freq.s      = 1				周波数の数
Plane wave (0/1)   = 0				平面波入射の有無
No. of Feeds       = 1				給電点の数
CPU Memory         = 34 [MB] (matrix)		使用メモリー(matrix/nomatrixモード)
Output filesize    = 2 [MB]			出力ファイル(oth.out)のサイズ
ABC = Mur-1st					吸収境界条件
Iteration = 1000, 100, 0.00010000		最大反復回数、出力間隔、収束判定条件
=== iteration start ===				反復計算開始
  Frequency [Hz] = 3.000e+09			周波数
  iteration     residual        <E>		反復回数、残差、電界平均
          0    0.23049433    1.5868377
        100    0.01542677    8.6469702
        200    0.00170703    8.7057894
        300    0.00013113    8.6845577
        341    0.00008859    8.6849243
  --- converged ---				収束したことを表す
=== input impedance ===				入力インピーダンス/入力アドミッタンス/反射損失
feed #1 (Z0[ohm] = 50.00)			給電線の特性インピーダンス
  freq[Hz]     Rin[ohm]    Xin[ohm]     Gin[mS]     Bin[mS]    R.L.[dB]
  3.000e+09     124.514      88.726       5.327      -3.796      -4.556
=== output files ===
oth.log, geom3d.htm, oth.out			出力されたファイル名
=== cpu time [sec] ===				以下、計算時間の内訳
  part-1 :       1.992				連立一次方程式
  part-2 :       0.030				その他(ファイル入出力など)
  --------------------
  total  :       2.022				合計
=== normal end ===				計算が正常終了したことを表す
Sun Dec  1 15:56:07 2019			終了時刻

4.2.3 図形出力

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

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

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

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

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

4.2.4 数値出力

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

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

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

  1. far0d.log : 特定方向遠方界周波数特性
  2. far1d.log : 遠方界面上
  3. far2d.log : 遠方界全方向
  4. near1d.log : 近傍界線上
  5. near2d.log : 近傍界面上