目次

5.7 データ作成ライブラリ

本プログラムにはデータ作成ライブラリが添付しています。
これはC言語のプログラムを作成して入力データを出力するためのライブラリです。
以下のような用途に使用します。

  1. データの数が多く規則的であるとき
  2. 座標値が互いに関連しており一か所を変えるとたくさんのデータが連動して変わるとき
  3. パラメーターを変えて繰り返し計算するとき

ファイル構成

datalibフォルダにデータ作成ライブラリのソースコード(ofd_datalib.c) とヘッダーファイル(ofd_datalib.h)があります。
ユーザーがプログラムを作成するときはofd_datalib.hをincludeし、 コンパイル時にofd_datalib.cを追加してください。

関数一覧

表5-7-1に関数一覧を示します。
関数については以下の規則があります。

  1. 関数名はすべて小文字で"ofd_"で始まります。
  2. 引数のうち実数はすべてdoubleです。
  3. 単位はすべてMKSA単位系です。
  4. 関数の呼び出し順は、最初がofd_init、最後がofd_outdataです。 関数2~10はofd_initとその他の関数の間に呼ぶ必要があります。 その他の関数の呼び出し順は任意ですが、表の順に呼ぶことを推奨します。
  5. 必須関数とオプション関数があります。必須関数は濃い色で表示しています。 オプション関数を呼び出さないときは既定値が設定されます。
  6. 複数回呼び出すことができる関数があります。そのときは複数個のデータが出力されます。
  7. 一度だけ呼び出せばよい関数を複数回呼び出したときは最後の呼び出しが有効になります。
  8. 引数にダミーとある所は適当な数値(例えば0)を入力してください。
表5-7-1 データ作成ライブラリ関数一覧
1 関数名ofd_init
機能初期化します。必須です。
宣言void ofd_init(void);
備考 他のすべての関数の前に一度呼び出すことが必要です。
2 関数名ofd_section_size
機能区間の最大数を指定します。オプションです。
宣言void ofd_section_size(int size);
引数 size : 区間の最大数(既定値:1000)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
3 関数名ofd_material_size
機能物性値の最大数を指定します。オプションです。
宣言void ofd_material_size(int size);
引数 size : 物性値の最大数(既定値:256)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
4 関数名ofd_geometry_size
機能幾何形状の最大数を指定します。オプションです。
宣言void ofd_geometry_size(int size);
引数 size : 幾何形状の最大数(既定値:100000)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
5 関数名ofd_feed_size
機能給電点の最大数を指定します。オプションです。
宣言void ofd_feed_size(int size);
引数 size : 給電点の最大数(既定値:1000)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
6 関数名ofd_load_size
機能集中定数の最大数を指定します。オプションです。
宣言void ofd_load_size(int size);
引数 size : 集中定数の最大数(既定値:1000)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
7 関数名ofd_point_size
機能観測点の最大数を指定します。オプションです。
宣言void ofd_point_size(int size);
引数 size : 観測点の最大数(既定値:1000)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
8 関数名ofd_far1d_size
機能遠方界面の最大数を指定します。オプションです。
宣言void ofd_far1d_size(int size);
引数 size : 遠方界面の最大数(既定値:1000)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
9 関数名ofd_near1d_size
機能近傍界観測線の最大数を指定します。オプションです。
宣言void ofd_near1d_size(int size);
引数 size : 近傍界観測線の最大数(既定値:1000)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
10 関数名ofd_near2d_size
機能近傍界観測面の最大数を指定します。オプションです。
宣言void ofd_near2d_size(int size);
引数 size : 近傍界観測面の最大数(既定値:1000)
備考 2-10の関数はofd_initの直後に呼び出すことが必要です。
11 関数名ofd_title
機能データにタイトルを付けます。オプションです。
宣言void ofd_title(const char title[]);
引数 title : タイトル
備考 計算結果には関係ありませんが、データの管理に使用します。
12 関数名ofd_xsection1
機能X方向の区間区切り位置を追加します。複数回呼び出し可。
宣言void ofd_xsection1(double x);
引数 x : X方向の区間区切り位置
13 関数名ofd_ysection1
機能Y方向の区間区切り位置を追加します。複数回呼び出し可。
宣言void ofd_ysection1(double y);
引数 y : Y方向の区間区切り位置
14 関数名ofd_zsection1
機能Z方向の区間区切り位置を追加します。複数回呼び出し可。
宣言void ofd_zsection1(double z);
引数 z : Z方向の区間区切り位置
15 関数名ofd_xdivision1
機能X方向の区間分割数を追加します。複数回呼び出し可。
宣言void ofd_xdivision1(int n);
引数 n : X方向の区間分割数
16 関数名ofd_ydivision1
機能Y方向の区間分割数を追加します。複数回呼び出し可。
宣言void ofd_ydivision1(int n);
引数 n : Y方向の区間分割数
17 関数名ofd_zdivision1
機能Z方向の区間分割数を追加します。複数回呼び出し可。
宣言void ofd_zdivision1(int n);
引数 n : Z方向の区間分割数
18 関数名ofd_xsection
機能X方向の区間区切り位置を指定します。
宣言void ofd_xsection(int n, ...);
引数 n : X方向の区間区切り位置の数(=X方向の区間数+1)
... : X方向の区間区切り位置(n個のdouble型数値)
19 関数名ofd_ysection
機能Y方向の区間区切り位置を指定します。
宣言void ofd_ysection(int n, ...);
引数 n : Y方向の区間区切り位置の数(=Y方向の区間数+1)
... : Y方向の区間区切り位置(n個のdouble型数値)
20 関数名ofd_zsection
機能Z方向の区間区切り位置を指定します。
宣言void ofd_zsection(int n, ...);
引数 n : Z方向の区間区切り位置の数(=Z方向の区間数+1)
... : Z方向の区間区切り位置(n個のdouble型数値)
21 関数名ofd_xdivision
機能X方向の区間分割数を指定します。
宣言void ofd_xdivision(int n, ...);
引数 n : X方向の区間数
... : X方向の区間分割数(n個のint型整数)
22 関数名ofd_ydivision
機能Y方向の区間分割数を指定します。
宣言void ofd_ydivision(int n, ...);
引数 n : Y方向の区間数
... : Y方向の区間分割数(n個のint型整数)
23 関数名ofd_zdivision
機能Z方向の区間分割数を指定します。
宣言void ofd_zdivision(int n, ...);
引数 n : Z方向の区間数
... : Z方向の区間分割数(n個のint型整数)
24 関数名ofd_material
機能物性値を追加します。複数回呼び出し可。
宣言void ofd_material(double epsr, double esgm, double amur, double msgm, const char name[]);
引数 epsr : 比誘電率
esgm : 導電率[S/m]
amur : 比透磁率
msgm : 導磁率[1/Sm]
name : 材質名(空白可)
備考 入力した順に物性値番号2,3,...が与えられます。 真空(=0)と完全導体(PEC)(=1)は予め登録されているので不要です。
25 関数名ofd_material_dispersion
機能分散性媒質の物性値を追加します。複数回呼び出し可。
宣言void ofd_material_dispersion(double er_inf, double a, double b, double c, const char name[]);
引数 er_inf : ε
a : a[1/s]
b : b[1/s]
c : c[1/s]
name : 材質名(空白可)
備考 分散パラメーターの意味については2.8参考。
26 関数名ofd_geometry
機能物体形状を追加します。複数回呼び出し可。
宣言void ofd_geometry(int m, int g, double x1, double x2, double y1, double y2, double z1, double z2);
引数 m : 物性値番号(0以上、ofd_material関数で指定されたもの)
g : 形状番号(形状番号=31,32,33,41,42,43,51,52,53以外)
x1,x2,y1,y2,z1,z2 : 座標値
備考 形状番号の意味と座標の並びについては5.3を参考にしてください。
27 関数名ofd_geometry_array
機能物体形状を追加します。座標を配列で指定します。複数回呼び出し可。
宣言void ofd_geometry_array(int m, int g, const double p[]);
引数 m : 物性値番号(0以上、ofd_material関数で指定されたもの)
g : 形状番号
p : 座標値、三角柱(形状番号=31,32,33,41,42,43,51,52,53)は8個、それ以外は6個
備考 形状番号の意味と座標の並びについては5.3を参考にしてください。
28 関数名ofd_geometry_name
機能直前に呼び出した物体形状に名前を与えます。オプションです。
宣言void ofd_geometry_name(const char name[]);
引数 name : 名前
備考 本関数はデータの管理に使用するものであり、計算には使用しません。
29 関数名ofd_feed
機能給電点を設定します。複数回呼び出し可。
宣言void ofd_feed(char dir, double x, double y, double z, double volt, double delay, double z0);
引数 dir : 給電の向き('X', 'Y', 'Z'のいずれか)
x : 給電点のX座標
y : 給電点のY座標
z : 給電点のZ座標
volt : 給電電圧[V]
delay : 時間遅れ[sec]
z0 : 給電線の特性インピーダンス[Ω]
備考 実際に計算に使用される給電点の位置は、指定した位置に最も近い向きの一致するYee格子電界点です。
給電点と平面波入射はどちらか一方が有効です。
30 関数名ofd_load
機能集中定数を設定します。複数回呼び出し可。
宣言void ofd_load(char dir, double x, double y, double z, char type, double rcl);
引数 dir : 集中定数の向き('X', 'Y', 'Z'のいずれか)
x : 集中定数のX座標
y : 集中定数のY座標
z : 集中定数のZ座標
type : 集中定数の種類('R', 'C', 'L'のいずれか)
rcl : R[Ω],C[F],L[H]の値
備考 実際に計算に使用される集中定数の位置は、指定した位置に最も近い向きの一致するYee格子電界点です。
31 関数名ofd_point
機能Sパラメーター計算用の観測点を追加します。複数回呼び出し可。
宣言void ofd_point(char dir, double x, double y, double z, const char prop[]);
引数 dir : 電界の向き('X', 'Y', 'Z'のいずれか)
x : 観測点のX座標
y : 観測点のY座標
z : 観測点のZ座標
prop : 第1観測点での伝搬方向("+X", "-X", "+Y", "-Y", "+Z", "-Z"のいずれか)
備考 実際に計算に使用される給電点の位置は、 指定した位置に最も近い向きの一致するYee格子電界点です。
32 関数名ofd_rfeed
機能給電点に内部抵抗を設定します。オプションです。
宣言void ofd_rfeed(double r);
引数 r : 内部抵抗[Ω]
備考 反復計算の加速に使用します。
複数の給電点があるときはすべての給電点に適用されます。
33 関数名ofd_wfeed
機能給電点の時間波形を設定します。オプションです。
宣言void ofd_wfeed(int wf);
引数 wf : 時間波形、0:微分ガウスパルス、1:ガウスパルス
備考 通常、既定値で十分です。
34 関数名ofd_pulsewidth
機能給電点のパルス幅を指定します。オプションです。
宣言void ofd_pulsewidth(double tw);
引数 tw : バルス幅[sec]
備考 通常、既定値で十分です。
35 関数名ofd_planewave
機能平面波入射を指定します。
宣言void ofd_planewave(double theta, double phi, int pol);
引数 theta : 入射方向のθ[度]
phi : 入射方向のφ[度]
pol : 偏波方向、1=垂直偏波、2=水平偏波
備考 給電点と平面波入射はどちらか一方が有効です。
36 関数名ofd_timestep
機能タイムステップを指定します。オプションです。
宣言void ofd_timestep(double dt);
引数 dt : タイムステップ幅[sec]
備考 通常、既定値で十分です。
37 関数名ofd_frequency1
機能給電点・観測点の周波数を指定します。必須です。
宣言void ofd_frequency1(double fstart, double fend, int div);
引数 fstart : 開始周波数[Hz]
fend : 終了周波数[Hz]
div : 周波数分割数
備考 単一周波数のときはfstart=fend, div=0としてください。
38 関数名ofd_frequency2
機能遠方界・近傍界の周波数を指定します。必須です。
宣言void ofd_frequency2(double fstart, double fend, int div);
引数 fstart : 開始周波数[Hz]
fend : 終了周波数[Hz]
div : 周波数分割数
備考 単一周波数のときはfstart=fend, div=0としてください。
39 関数名ofd_solver
機能反復計算条件を指定します。オプションです。
宣言void ofd_solver(int maxiter, int nout, double converg);
引数 maxiter : 最大反復回数
nout : 収束判定間隔=出力間隔
converg : 収束判定条件(通常1e-3)
備考 本関数を呼び出さないときは適当な既定値が設定されますが、収束状況を見て適当に設定することが大切です。
40 関数名ofd_pml
機能吸収境界条件にPMLを指定します。オプションです。
宣言void ofd_pml(int l, double m, double r0);
引数 l : PML層数L
m : PML次数M
r0 : PML反射係数R0
備考 推奨値はl=5, m=2, r0=1e-5です。
本関数を呼び出さないときは吸収境界条件はMur一次になります。
41 関数名ofd_pbc
機能周期境界条件を指定します。オプションです。
宣言void ofd_pbc(int pbcx, int pbcy, int pbcz);
引数 pbcx = 0/1 : X方向に周期境界条件を指定しない/する
pbcy = 0/1 : Y方向に周期境界条件を指定しない/する
pbcz = 0/1 : Z方向に周期境界条件を指定しない/する
42 関数名ofd_matchingloss
機能アンテナの利得に整合損を含めます。オプションです。
宣言void ofd_matchingloss(int i);
引数 i : 0/1=しない/する。既定値は0です。
備考 本関数を呼び出さないときはアンテナの利得は整合損を含みません。
43 関数名ofd_plotiter
機能収束状況を2Dで図形出力します。オプションです。
宣言void ofd_plotiter(int i);
引数 i : 0/1=しない/する。既定値は0です。
44 関数名ofd_plotfeed
機能給電点の時間波形とスペクトルを2Dで図形出力します。オプションです。
宣言void ofd_plotfeed(int i);
引数 i : 0/1=しない/する。既定値は0です。
45 関数名ofd_plotpoint
機能観測点の時間波形とスペクトルを2Dで図形出力します。オプションです。
宣言void ofd_plotpoint(int i);
引数 i : 0/1=しない/する。既定値は0です。
46 関数名ofd_plotsmith
機能スミスチャートを2Dで図形出力します。オプションです。
宣言void ofd_plotsmith(int i);
引数 i : 0/1=しない/する。既定値は0です。
47 関数名ofd_plotzin
機能入力インピーダンスの周波数特性を2Dで図形出力します。オプションです。
宣言void ofd_plotzin(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[Ω]
max : 最大[Ω]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
48 関数名ofd_plotyin
機能入力アドミッタンスの周波数特性を2Dで図形出力します。オプションです。
宣言void ofd_plotyin(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[S]
max : 最大[S]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
min, maxの単位はSです。例えば100mSのときは"0.1"または"100e-3"と入力してください。
49 関数名ofd_plotref
機能反射係数の周波数特性を2Dで図形出力します。オプションです。
宣言void ofd_plotref(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
50 関数名ofd_plotspara
機能Sパラメーターの周波数特性を2Dで図形出力します。オプションです。
宣言void ofd_plotspara(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
51 関数名ofd_plotcoupling
機能結合度の周波数特性を2Dで図形出力します。オプションです。
宣言void ofd_plotcoupling(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
52 関数名ofd_plotfar0d
機能指定した方向の遠方界の周波数特性を2Dで図形出力します。オプションです。
宣言void ofd_plotfar0d(double theta, double phi, int scale, double min, double max, int div);
引数 theta : θ[度]
phi : φ[度]
scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
53 関数名ofd_freqdiv
機能周波数軸の分割数を指定します。オプションです。
宣言void ofd_freqdiv(int div);
引数 div : 分割数。規定値は10です。
54 関数名ofd_plotfar1d
機能遠方界面上パターンを2Dで図形出力します。複数回呼び出し可。
宣言void ofd_plotfar1d(char dir, int div, double angle);
引数 dir : 遠方界面の向き('X', 'Y', 'Z', 'V', 'H'のいずれか)
div : 360度の分割数
angle : dir='V'のときの一定角φ[度]、dir='H'のとき一定角θ[度]、それ以外はダミー
備考 dir='X' : X面すなわちYZ面
dir='Y' : Y面すなわちZX面
dir='Z' : Z面すなわちXY面
dir='V' : φ一定の垂直断面(θ=0-360度)
dir='H' : θ一定の水平断面(φ=0-360度)
55 関数名ofd_far1dstyle
機能遠方界面上パターンの図形出力の表示法を指定します。オプションです。
宣言void ofd_far1dstyle(int i0);
引数 i0 : 0=円プロット、1=XYプロット。既定値は0です。
56 関数名ofd_far1dcomponent
機能遠方界面上パターンの図形出力の成分を選択します。オプションです。
宣言void ofd_far1dcomponent(int i0, int i1, int i2);
引数 i0=1 : θ成分とφ成分を図形出力します。
i1=1 : 楕円偏波の主軸と副軸を図形出力します。
i2=1 : 左右円偏波成分を図形出力します。
備考 本関数を呼び出さないときはi0=1, i1=0, i2=0になります。
57 関数名ofd_far1ddb
機能遠方界面上パターンの図形出力の単位を指定します。オプションです。
宣言void ofd_far1ddb(int i0);
引数 i0 : 0=線形、1=dB。既定値は1です。
58 関数名ofd_far1dnorm
機能遠方界面上パターンの図形出力を最大値で正規化します。オプションです。
宣言void ofd_far1dnorm(int i0);
引数 i0 : 0/1=しない/する。既定値は0です。
59 関数名ofd_far1dscale
機能遠方界面上パターンの図形出力のスケールを指定します。オプションです。
宣言void ofd_far1dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
60 関数名ofd_plotfar2d
機能遠方界全方向パターンを3Dで図形出力します。
宣言void ofd_plotfar2d(int divtheta, int divphi);
引数 divtheta : θ方向(0-180度)の分割数
divphi : φ方向(0-360度)の分割数
備考 本関数は1回だけ有効です。
61 関数名ofd_far2dcomponent
機能遠方界全方向パターンの図形出力の成分を選択します。オプションです。
宣言void ofd_far2dcomponent(int i0, int i1, int i2, int i3, int i4, inti5, int i6);
引数 i0=1 : 絶対値を図形出力します。
i1=1 : θ成分を図形出力します。
i2=1 : φ成分を図形出力します。
i3=1 : 楕円偏波の主軸を図形出力します。
i4=1 : 楕円偏波の副軸を図形出力します。
i5=1 : 右旋円偏波成分を図形出力します。
i6=1 : 左旋円偏波成分を図形出力します。
備考 本関数を呼び出さないときは i0=1, i1=0, i2=0, i3=0, i4=0, i5=0, i6=0 になります。
62 関数名ofd_far2ddb
機能遠方界全方向パターンの図形出力の単位を指定します。オプションです。
宣言void ofd_far2ddb(int i0);
引数 i0 : 0=線形、1=dB。既定値は1です。
63 関数名ofd_far2dscale
機能遠方界全方向パターンの図形出力のスケールを指定します。オプションです。
宣言void ofd_far2dscale(double min, double max);
引数 min : 最小値
max : 最大値
備考 本関数を呼び出さないときはスケールは自動設定されます。
64 関数名ofd_far2dobj
機能遠方界全方向パターンの図形出力に上書きする物体形状の相対的な大きさを指定します。オプションです。
宣言void ofd_far2dobj(double rscale);
引数 rscale : 相対的な大きさ。既定値は0.5です。
65 関数名ofd_plotnear1d
機能近傍界線上の電磁界分布を2Dで図形出力します。複数回呼び出し可。オプションです。
宣言void ofd_plotnear1d(const char component[], char dir, double p1, double p2);
引数 component : 計算する成分("E", "Ex", "Ey", "Ez", "H", "Hx", "Hy", "Hz"のいずれか)
dir : 線の向き('X', 'Y', 'Z'のいずれか)
p1, p2 : 線の座標、向きがXのときはY,Z座標、向きがYのときはZ,X座標、向きがZのときはX,Y座標
66 関数名ofd_near1ddb
機能近傍界線上分布図の単位を指定します。オプションです。
宣言void ofd_near1ddb(int i0);
引数 i0 : 0=線形、1=dB。既定値は0です。
67 関数名ofd_near1dscale
機能近傍界線上分布図のスケールを指定します。オプションです。
宣言void ofd_near1dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
68 関数名ofd_near1dnoinc
機能近傍界線上分布図で入射波を除きます。オプションです。
宣言void ofd_near1dnoinc(int i0);
引数 i0 : 0=しない、1=する。既定値は0です。
備考 本関数は平面波入射のとき有効です。
69 関数名ofd_plotnear2d
機能近傍界面上の電磁界分布を2Dまたは3Dで図形出力します。複数回呼び出し可。オプションです。
宣言void ofd_plotnear2d(const char component[], char dir, double p);
引数 component : 計算する成分("E", "Ex", "Ey", "Ez", "H", "Hx", "Hy", "Hz"のいずれか)
dir : 面の向き('X', 'Y', 'Z'のいずれか)
p : 面の座標
70 関数名ofd_near2ddim
機能近傍界面上分布図の図形出力を選択します。オプションです。
宣言void ofd_near2ddim(int i0, int i1);
引数 i0=1 : 2Dを図形出力する。(既定値)
i1=1 : 3Dを図形出力する。(既定値)
71 関数名ofd_near2dframe
機能近傍界面上分布図の動画のフレーム数を指定します。オプションです。
宣言void ofd_near2dframe(int i0);
引数 i0 : 1周期のフレーム数
備考 本関数を呼び出さないときは動画は図形出力されません。
72 関数名ofd_near2ddb
機能近傍界面上分布図の単位を指定します。オプションです。
宣言void ofd_near2ddb(int i0);
引数 i0 : 0=線形、1=dB。既定値は0です。
73 関数名ofd_near2dscale
機能近傍界面上分布図のスケールを指定します。オプションです。
宣言void ofd_near2dscale(double min, double max);
引数 min : 最小値
max : 最大値
備考 本関数を呼び出さないときはスケールは自動設定されます。
74 関数名ofd_near2dcontour
機能近傍界面上分布図の描画方法を指定します。オプションです。
宣言void ofd_near2dcontour(int i0);
引数 i0 : 0=カラー精細、1=カラー簡易、2=モノクロ精細、3=モノクロ簡易
75 関数名ofd_near2dobj
機能近傍界面上分布図に物体を描くか。オプションです。
宣言void ofd_near2dobj(int i0);
引数 i0 : 0=描かない、1=描く。既定値は1です。
76 関数名ofd_near2dnoinc
機能近傍界面上分布図で入射波を除きます。オプションです。
宣言void ofd_near2dnoinc(int i0);
引数 i0 : 0=しない、1=する。既定値は0です。
備考 本関数は平面波入射のとき有効です。
77 関数名ofd_near2dzoom
機能近傍界面上分布図を一部を拡大します。オプションです。
宣言void ofd_near2dzoom(double h0, double h1, double v0, double v1);
引数 h0,h1:横方向の下限と上限
v0,v1:縦方向の下限と上限
備考 面の向きがX/Y/Z方向のとき、横-縦は順にY-Z/X-Z/X-Yです。
78 関数名ofd_outdata
機能出力ファイル名を指定します。必須です。
宣言void ofd_outdata(const char file[]);
引数 file : 出力ファイル名。拡張子は".ofd"推奨。

メッシュデータについての注意事項

メッシュデータはX方向、Y方向、Z方向から成り、それぞれ1個以上の区間から成ります。
それらを入力するには例えばX方向については、 ofd_xsection1とofd_xdivision1を組み合わせるか、 ofd_xsectionとofd_xdivisionを使用するかの2通りがあります。 これらはどちらか一方が有効です。
前者では区間の数だけofd_xsection1とofd_xdivision1を呼び出し、 最後にofd_xsection1で終わります。
後者ではofd_xsectionとofd_xdivisionを一回呼び出します。
なお、後者では引数の数が可変になります。 可変個の引数に数値を直接代入するときは整数(int)であるか実数(double)であるかわかるように入力する必要があります。 整数は例えば"1"となります。 実数は例えば"1.0", "1e-3", "1.0e-3"となります。

サンプルプログラム

リスト5-7-1にデータ作成ライブラリを使用したサンプルプログラムを示します。

リスト5-7-1 データ作成ライブラリ用サンプルプログラム


/*
sample1.c

OpenFDTDデータ作成ライブラリ、サンプルプログラム No.1

コンパイル+実行:
Windows + VC++:
> cl.exe /O2 sample1.c ofd_datalib.c
> sample1.exe
Linux + gcc:
$ gcc -O sample1.c ofd_datalib.c -o sample1
$ ./sample1
*/

#include "ofd_datalib.h"

int main(void)
{
	// initialize

	ofd_init();

	// title

	ofd_title("sample1");

	// mesh

	ofd_xsection(2, -75e-3, +75e-3);
	ofd_xdivision(1, 30);

	ofd_ysection(2, -75e-3, +75e-3);
	ofd_ydivision(1, 30);

	ofd_zsection(4, -75e-3, -25e-3, +25e-3, +75e-3);
	ofd_zdivision(3, 10, 11, 10);

	// material

	ofd_material(2.0, 0.0, 1.0, 0.0, "");

	// geometry

	ofd_geometry(1, 1, 0e-3, 0e-3, 0e-3, 0e-3, -25e-3, +25e-3);

	// feed

	ofd_feed('Z', 0e-3, 0e-3, 0e-3, 1, 0, 50);
	//ofd_rfeed(10);

	// ABC

	//ofd_pml(5, 2, 1e-5);

	// frequency

	ofd_frequency1(2e9, 3e9, 10);
	ofd_frequency2(3e9, 3e9, 0);

	// solver

	ofd_solver(1000, 100, 1e-3);

	// iteration

	ofd_plotiter(1);

	// waveform and spectrum

	//ofd_plotfeed(1);
	//ofd_plotpoint(1);

	// frequency char.s

	ofd_plotsmith();
	ofd_plotzin(1, 0, 0, 0);
	ofd_plotyin(1, 0, 0, 0);
	ofd_plotref(1, 0, 0, 0);
	//ofd_plotfar0d(90, 0, 1, 0, 0, 0);

	// far-1d

	ofd_plotfar1d('X', 72, 0);

	// far-2d

	ofd_plotfar2d(18, 36);

	// near-1d

	ofd_plotnear1d("E", 'Z', 30e-3, 0e-3);

	// near-2d

	ofd_plotnear2d("E", 'X', 30e-3);

	// output options

	//ofd_far1dstyle(1);
	//ofd_far1dcomponent(1, 0, 0);
	//ofd_far1ddb(1);
	//ofd_far1dnorm(1);
	//ofd_far1dscale(-30, +10, 4);
	//ofd_far2dcomponent(1, 0, 0, 0, 0, 0,0);
	//ofd_far2ddb(1);
	//ofd_far2dscale(-30, +10);
	//ofd_far2dobj(0.5);
	//ofd_near1ddb(1);
	//ofd_near1dscale(-30, +10, 4);
	//ofd_near2ddim(1, 1);
	//ofd_near2ddb(1);
	//ofd_near2dscale(-30, +10);
	//ofd_near2dcontour(0);
	//ofd_near2dobj(1);
	//ofd_near2dzoom(-50e-3, +50e-3, -50e-3, +50e-3);

	// output

	ofd_outdata("sample1.ofd");

	return 0;
}

コンパイル・実行方法

データ作成ライブラリを使用したソースコードをコンパイル・実行する方法は以下の通りです。

Windows+VC++の場合

> cl.exe /O2 sample1.c ofd_datalib.c
> sample1.exe

Linux+gccの場合

$ gcc -O sample1.c ofd_datalib.c -o sample1
$ ./sample1
以上でファイル(ここではsample1.ofd)が出力されます。
リスト5-7-2に出力されたファイルを示します。
このファイルがOpenFDTDの入力データになります。

リスト5-7-2 データ作成ライブラリのサンプルデータ


OpenFDTD 4 3
title = sample1
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 = 2e+09 3e+09 10
frequency2 = 3e+09 3e+09 0
solver = 1000 100 0.001
plotiter = 1
plotfeed = 0
plotpoint = 0
plotsmith = 1
plotzin = 1
plotyin = 1
plotref = 1
plotfar1d = X 72
far1dstyle = 0
far1dcomponent = 1 0 0
far1ddb = 1
plotfar2d = 18 36
far2dcomponent = 1 0 0 0 0 0 0
far2ddb = 1
far2dobj = 0.5
plotnear1d = E Z 0.03 0
near1ddb = 0
plotnear2d = E X 0.03
near2ddim = 1 1
near2ddb = 0
near2dcontour = 0
near2dobj = 1
end

バッチ処理

データ作成ライブラリを使用すると、 パラメーターを変えて複数回の計算をバッチ処理することができます。
リスト5-7-3にサンプルプログラムを示します。
ダイポールアンテナと反射板の距離を変えながら繰り返し計算を行っています。
計算を実行するにはシステム関数"system"を使用します。
図形出力ファイル"ev.ev2"とログファイル"ofd.log"を一つのファイルに結合しています。
実行プログラムのオプションと出力ファイルの処理は適当に変更してください。

リスト5-7-3 バッチ処理用サンプルプログラム


/*
sample2.c

OpenFDTDデータ作成ライブラリ、サンプルプログラム No.2

コンパイル+実行:
Windows + VC++:
> cl.exe /O2 sample2.c ofd_datalib.c
> sample2.exe
Linux + gcc:
$ gcc -O sample2.c ofd_datalib.c -o sample2
$ ./sample2
*/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "ofd_datalib.h"

int main(void)
{
	double x1, x2;
	double y1, y2, y3;
	double z0, z1, z2, z3, z4, z5;
	char   str[BUFSIZ], cmd[BUFSIZ];
	const double d = 5e-3;		// cell size
	const int    oc = 5;		// outer cells
	const char name[] = "sample2";

	// delete output file

	sprintf(str, "%s.log", name);
	remove(str);

#ifdef _WIN32
	sprintf(str, "%s.ev2", name);
	remove(str);
#endif

	// loop

	for (int loop = 1; loop <= 5; loop++) {

		// initialize

		ofd_init();

		// title

		sprintf(str, "%s_%03d", name, loop);
		ofd_title(str);

		// mesh

		x1 = -(3 + loop) * d;
		x2 = 0e-3;
		ofd_xsection(4, x1 - (oc * d), x1, x2, x2 + (oc * d));
		ofd_xdivision(3, oc, NINT(x2 - x1, d), oc);

		y1 = -50e-3;
		y2 = 0e-3;
		y3 = +50e-3;
		ofd_ysection(5, y1 - (oc * d), y1, y2, y3, y3 + (oc * d));
		ofd_ydivision(4, oc, NINT(y2 - y1, d), NINT(y3 - y2, d), oc);

		z0 = -75e-3;
		z1 = -50e-3;
		z2 = -25e-3;
		z3 = +25e-3;
		z4 = +50e-3;
		z5 = +75e-3;
		ofd_zsection(6, z0, z1, z2, z3, z4, z5);
		ofd_zdivision(5, 5, 5, 11, 5, 5);

		// geometry

		ofd_geometry(1, 1, x2, x2, y2, y2, z2, z3);

		ofd_geometry(1, 1, x1, x1, y1, y3, z1, z4);

		// feed

		ofd_feed('Z', x2, y2, 0e-3, 1, 0, 50);

		// frequency

		ofd_frequency1(2e9, 3e9, 10);
		ofd_frequency2(3e9, 3e9, 0);

		// solver

		ofd_solver(1000, 100, 1e-3);

		// far1d field

		ofd_plotfar1d('Z', 72, 0);

		// output

		sprintf(str, "%s_%03d.ofd", name, loop);
		ofd_outdata(str);

		// solver, post, append result

#ifdef _WIN32
		sprintf(cmd, "ofd.exe -n 4 %s", str);
		system(cmd);

		sprintf(cmd, "ofd_post.exe -n 4 %s", str);
		system(cmd);

		sprintf(cmd, "type ofd.log >> %s.log", name);
		system(cmd);

		sprintf(cmd, "type ev.ev2 >> %s.ev2", name);
		system(cmd);
#else
		sprintf(cmd, "./ofd -n 4 %s", str);
		system(cmd);

		sprintf(cmd, "./ofd_post -n 4 -html %s", str);
		system(cmd);

		sprintf(cmd, "cat ofd.log >> %s.log", name);
		system(cmd);

		sprintf(str, "%s_%03d.htm", name, loop);
		remove(str);
		rename("ev2d.htm", str);
#endif
	}

	return 0;
}