"データ作成ライブラリ"はC言語のプログラミングとC/C++コンパイラーが必要でしたが、
ここではWindowsに標準装備されているVBScript[15]を用いてOpenFDTDデータを作成する方法を説明します。
リスト5-8-1にサンプルコードを示します。
VBScriptはコンパイルが不要で、ソースコードを編集後たたちに実行することができます。
計算対象に応じて"(要編集)"部分を編集して下記の"使用法"のコマンドを実行するとOpenFDTDデータが出力されます。
(注意)
VBScriptファイルをダウンロードして実行するとセキュリティソフトが警告を出すので、
内容を確認の上、許可してください。
Microsoftはセキュリティの観点からVBScriptを非推奨としています。
https://forest.watch.impress.co.jp/docs/news/1593925.html
リスト5-8-1 データ作成スクリプト (makeofd.vbs)
'makeofd.vbs : OpenFDTDデータ出力スクリプト(Windows用) ' '使用法: '・必要箇所を編集する(単位はすべてMKSA) '・コマンドプロンプトを起動しOpenFDTDフォルダで以下を実行するとOpenFDTDデータが出力される '$ cscript.exe /nologo makeofd.vbs > 出力ファイル.ofd Option Explicit '定数 Const version = "4 0" 'OpenFDTDバージョン Const c = " " '区切り文字 '各種パラメーター(要編集) Const title = "ダイポールアンテナ" 'タイトル Const l = 50e-3 'ダイポールアンテナの長さ Const dfeed = "Z" '給電点の向き Const xfeed = 0e-3 '給電点X座標 Const yfeed = 0e-3 '給電点Y座標 Const zfeed = 0e-3 '給電点Z座標 Const er = 2 '比誘電率 Const sigma = 0 '導電率 Const d = 5e-3 '基本セルサイズ '変数 Dim xmesh, ymesh, zmesh, xdiv, ydiv, zdiv 'メインルーチンを呼ぶ Main 'メインルーチン Sub Main 'ヘッダー WScript.Echo "OpenFDTD " & version WScript.Echo "title = " & title 'メッシュ mesh outputmesh '物性値(要編集) WScript.Echo "material = 1 " & er & c & sigma & c & "1 0" '物体形状 geometry '波源:給電点または平面波入射(要編集) WScript.Echo "feed = " & dfeed & c & xfeed & c & yfeed & c & zfeed & c & "1 0 50" '周波数(要編集) WScript.Echo "frequency1 = 2e9 3e9 5" '第1周波数 WScript.Echo "frequency2 = 3e9 3e9 0" '第2周波数 '計算条件(要編集) WScript.Echo "solver = 3000 50 1e-3" '図形出力(要編集) WScript.Echo "plotiter = 1" WScript.Echo "plotzin = 1" '終了行 WScript.Echo "end" End Sub 'メッシュ(要編集) Sub mesh 'X方向=1区間 xmesh = Array(-75e-3, +75e-3) xdiv = Array(nint(xmesh(1) - xmesh(0), d)) 'Y方向=1区間 ymesh = Array(-75e-3, +75e-3) ydiv = Array(nint(ymesh(1) - ymesh(0), d)) 'Z方向=3区間 zmesh = Array(-75e-3, -l / 2, +l / 2, +75e-3) zdiv = Array(nint(zmesh(1) - zmesh(0), d), _ nint(zmesh(2) - zmesh(1), d), _ nint(zmesh(3) - zmesh(2), d)) '給電点を中心に置くために中心区間の分割数を奇数にする If (zdiv(1) Mod 2) = 0 Then zdiv(1) = zdiv(1) + 1 End If End Sub '物体形状(要編集) Sub geometry Dim m, shape, x1, y1, z1, x2, y2, z2 'ダイポールアンテナ m = 1 '1=PEC shape = 1 '1=直方体 x1 = 0e-3 x2 = 0e-3 y1 = 0e-3 y2 = 0e-3 z1 = -l / 2 z2 = +l / 2 outputg m, shape, x1, x2, y1, y2, z1, z2 End Sub 'メッシュ出力 Sub outputmesh Dim str, i, j, k str = "xmesh = " & CSng(xmesh(0)) For i = 0 To UBound(xdiv) str = str & c & xdiv(i) & c & CSng(xmesh(i + 1)) Next WScript.Echo str str = "ymesh = " & CSng(ymesh(0)) For j = 0 To UBound(ydiv) str = str & c & ydiv(j) & c & CSng(ymesh(j + 1)) Next WScript.Echo str str = "zmesh = " & CSng(zmesh(0)) For k = 0 To UBound(zdiv) str = str & c & zdiv(k) & c & CSng(zmesh(k + 1)) Next WScript.Echo str End Sub '物体形状出力 Sub outputg(m, shape, x1, x2, y1, y2, z1, z2) WScript.Echo "geometry = " & m & c & shape & c _ & CSng(x1) & c & CSng(x2) & c _ & CSng(y1) & c & CSng(y2) & c _ & CSng(z1) & c & CSng(z2) End Sub 'l/dに一番近い整数 Function nint(l, d) nint = CInt(CSng(l) / CSng(d)) End Function
リスト5-8-2に出力ファイルの一例を示します。
リスト5-8-2 出力ファイル例
OpenFDTD 4 0 title = ダイポールアンテナ xmesh = -0.075 30 0.075 ymesh = -0.075 30 0.075 zmesh = -0.075 10 -0.025 11 0.025 10 0.075 material = 1 2 0 1 0 geometry = 1 1 0 0 0 0 -0.025 0.025 feed = Z 0 0 0 1 0 50 frequency1 = 2e9 3e9 5 frequency2 = 3e9 3e9 0 solver = 3000 50 1e-3 plotiter = 1 plotzin = 1 end
エラーメッセージ
スクリプトに文法の間違いがあると実行時に下記のようなエラーメッセージが出て止まります。
数字の(15, 7)は15行目7カラムでエラーを検知したという意味です。
スクリプトを修正して再度実行してください。
\OpenFDTD\makeofd.vbs(15, 7) Microsoft VBScript コンパイル エラー: 識別子がありません。