目次

5.8 データ作成スクリプト

"データ作成ライブラリ"は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 コンパイル エラー: 識別子がありません。