目次

4.7 データ作成ライブラリ

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

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

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

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

  1. 関数名はすべて小文字で"oth_"で始まります。
  2. 引数のうち実数はすべてdoubleです。
  3. 単位はすべてMKSA単位系です。
  4. 関数の呼び出し順は、最初がoth_init、最後がoth_outdataです。 関数2~10はoth_initとその他の関数の間に呼ぶ必要があります。 その他の関数の呼び出し順は任意ですが、表の順に呼ぶことを推奨します。
  5. 必須関数とオプション関数があります。必須関数は濃い色で表示しています。 オプション関数を呼び出さないときは既定値が設定されます。
  6. 複数回呼び出すことができる関数があります。そのときは複数個のデータが出力されます。
  7. 一度だけ呼び出せばよい関数を複数回呼び出したときは最後の呼び出しが有効になります。
  8. 引数にダミーとある所は適当な数値(例えば0)を入力してください。
表4-7-1 データ作成ライブラリ関数一覧
1 関数名oth_init
機能初期化します。必須です。
宣言void oth_init(void);
備考 他のすべての関数の前に一度呼び出すことが必要です。
2 関数名oth_section_size
機能区間の最大数を指定します。オプションです。
宣言void oth_section_size(int size);
引数 size : 区間の最大数(既定値:1000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
3 関数名oth_material_size
機能物性値の最大数を指定します。オプションです。
宣言void oth_material_size(int size);
引数 size : 物性値の最大数(既定値:1000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
4 関数名oth_geometry_size
機能幾何形状の最大数を指定します。オプションです。
宣言void oth_geometry_size(int size);
引数 size : 幾何形状の最大数(既定値:100000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
5 関数名oth_feed_size
機能給電点の最大数を指定します。オプションです。
宣言void oth_feed_size(int size);
引数 size : 給電点の最大数(既定値:1000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
6 関数名oth_load_size
機能集中定数の最大数を指定します。オプションです。
宣言void oth_load_size(int size);
引数 size : 集中定数の最大数(既定値:1000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
7 関数名oth_point_size
機能観測点の最大数を指定します。オプションです。
宣言void oth_point_size(int size);
引数 size : 観測点の最大数(既定値:1000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
8 関数名oth_far1d_size
機能遠方界面の最大数を指定します。オプションです。
宣言void oth_far1d_size(int size);
引数 size : 遠方界面の最大数(既定値:1000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
9 関数名oth_near1d_size
機能近傍界観測線の最大数を指定します。オプションです。
宣言void oth_near1d_size(int size);
引数 size : 近傍界観測線の最大数(既定値:1000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
10 関数名oth_near2d_size
機能近傍界観測面の最大数を指定します。オプションです。
宣言void oth_near2d_size(int size);
引数 size : 近傍界観測面の最大数(既定値:1000)
備考 2-10の関数はoth_initの直後に呼び出すことが必要です。
11 関数名oth_title
機能データにタイトルを付けます。オプションです。
宣言void oth_title(const char title[]);
引数 title : タイトル
備考 計算結果には関係ありませんが、データの管理に使用します。
12 関数名oth_xsection1
機能X方向の区間区切り位置を追加します。複数回呼び出し可。
宣言void oth_xsection1(double x);
引数 x : X方向の区間区切り位置
13 関数名oth_ysection1
機能Y方向の区間区切り位置を追加します。複数回呼び出し可。
宣言void oth_ysection1(double y);
引数 y : Y方向の区間区切り位置
14 関数名oth_zsection1
機能Z方向の区間区切り位置を追加します。複数回呼び出し可。
宣言void oth_zsection1(double z);
引数 z : Z方向の区間区切り位置
15 関数名oth_xdivision1
機能X方向の区間分割数を追加します。複数回呼び出し可。
宣言void oth_xdivision1(int n);
引数 n : X方向の区間分割数
16 関数名oth_ydivision1
機能Y方向の区間分割数を追加します。複数回呼び出し可。
宣言void oth_ydivision1(int n);
引数 n : Y方向の区間分割数
17 関数名oth_zdivision1
機能Z方向の区間分割数を追加します。複数回呼び出し可。
宣言void oth_zdivision1(int n);
引数 n : Z方向の区間分割数
18 関数名oth_xsection
機能X方向の区間区切り位置を指定します。
宣言void oth_xsection(int n, ...);
引数 n : X方向の区間区切り位置の数(=X方向の区間数+1)
... : X方向の区間区切り位置(n個のdouble型数値)
19 関数名oth_ysection
機能Y方向の区間区切り位置を指定します。
宣言void oth_ysection(int n, ...);
引数 n : Y方向の区間区切り位置の数(=Y方向の区間数+1)
... : Y方向の区間区切り位置(n個のdouble型数値)
20 関数名oth_zsection
機能Z方向の区間区切り位置を指定します。
宣言void oth_zsection(int n, ...);
引数 n : Z方向の区間区切り位置の数(=Z方向の区間数+1)
... : Z方向の区間区切り位置(n個のdouble型数値)
21 関数名oth_xdivision
機能X方向の区間分割数を指定します。
宣言void oth_xdivision(int n, ...);
引数 n : X方向の区間数
... : X方向の区間分割数(n個のint型整数)
22 関数名oth_ydivision
機能Y方向の区間分割数を指定します。
宣言void oth_ydivision(int n, ...);
引数 n : Y方向の区間数
... : Y方向の区間分割数(n個のint型整数)
23 関数名oth_zdivision
機能Z方向の区間分割数を指定します。
宣言void oth_zdivision(int n, ...);
引数 n : Z方向の区間数
... : Z方向の区間分割数(n個のint型整数)
24 関数名oth_material
機能物性値を追加します。数値で指定します。複数回呼び出し可。
宣言void oth_material(double epsr1, double epsr2, double mur1, double mur2);
引数 epsr1 : 比誘電率の実部
epsr2 : 比誘電率の虚部(>=0)
mur1 : 比透磁率の実部
mur2 : 比透磁率の虚部(>=0)
備考 入力した順に物性値番号2,3,...が与えられます。 真空(=0)と完全導体(PEC)(=1)は予め登録されていますので不要です。
25 関数名oth_material_dispersion
機能物性値を追加します。分散ファイル名で指定します。複数回呼び出し可。
宣言void oth_material_dispersion(const char fn[]);
引数 fn : 分散ファイル名
備考 入力した順に物性値番号2,3,...が与えられます。 真空(=0)と完全導体(PEC)(=1)は予め登録されていますので不要です。
26 関数名oth_geometry
機能物体形状を追加します。複数回呼び出し可。
宣言void oth_geometry(int m, int g, double x1, double x2, double y1, double y2, double z1, double z2);
引数 m : 物性値番号(0以上、oth_material関数で指定されたもの)
g : 形状番号(形状番号=31,32,33以外)
x1,x2,y1,y2,z1,z2 : 座標値
備考 形状番号の意味と座標の並びについては4.3を参考にしてください。
27 関数名oth_geometry_array
機能物体形状を追加します。座標を配列で指定します。複数回呼び出し可。
宣言void oth_geometry_array(int m, int g, const double p[]);
引数 m : 物性値番号(0以上、oth_material関数で指定されたもの)
g : 形状番号
p : 座標値、三角柱(形状番号=31,32,33)は8個、それ以外は6個
備考 形状番号の意味と座標の並びについては4.3を参考にしてください。
28 関数名oth_geometry_name
機能直前に呼び出した物体形状に名前を与えます。オプションです。
宣言void oth_geometry_name(const char name[]);
引数 name : 名前
備考 本関数はデータの管理に使用するものであり、計算には使用しません。
29 関数名oth_feed
機能給電点を設定します。複数回呼び出し可。
宣言void oth_feed(char dir, double x, double y, double z, double volt, double phase, double z0);
引数 dir : 給電の向き('X', 'Y', 'Z'のいずれか)
x : 給電点のX座標
y : 給電点のY座標
z : 給電点のZ座標
volt : 電圧[V]
phase : 位相[度]
z0 : 給電線の特性インピーダンス[Ω]
備考 実際に計算に使用される給電点の位置は、指定した位置に最も近い向きの一致するYee格子電界点です。
給電点と平面波入射のどちらか一方が必須です。
30 関数名oth_planewave
機能平面波入射を設定します。
宣言void oth_planewave(double theta, double phi, int pol);
引数 theta : 原点から見た入射方向のθ[度]
phi : 原点から見た入射方向のφ[度]
pol : 偏波、1:垂直偏波、2:水平偏波、3:右旋円偏波、4:左旋円偏波
備考 給電点と平面波入射のどちらか一方が必須です。
31 関数名oth_planewave_ellipse
機能楕円偏波の平面波入射を指定します。
宣言void oth_planewave_ellipse(double theta, double phi, double a, double r);
引数 theta : 原点から見た入射方向のθ[度]
phi : 原点から見た入射方向のφ[度]
a : 主軸のθ軸からφ軸への傾き[度]
r : 軸比(-1≤r≤+1)
備考 給電点と平面波入射のどちらか一方が必須です。
32 関数名oth_semispace
機能半領域への平面波入射を設定します。オプションです。
宣言void oth_semispace(char dir, double pos);
引数 dir : 半領域の向き('X', 'Y', 'Z'のいずれか)
pos : 半領域の境界面の座標
備考 半領域とは空間を二つに分けて平面波入射の電界を入射波、反射波、透過波に分ける方法です。 平面波入射のとき有効です。
33 関数名oth_fullspace
機能背景媒質を真空以外に設定します。オプションです。
宣言void oth_fullspace(void);
備考 平面波入射のとき有効です。
34 関数名oth_point
機能Sパラメーター計算用の観測点を追加します。複数回呼び出し可。オプションです。
宣言void oth_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格子電界点です。
35 関数名oth_load
機能集中定数を設定します。複数回呼び出し可。オプションです。
宣言void oth_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[Farad]またはL[Henry]
備考 実際に計算に使用される集中定数の位置は、指定した位置に最も近い向きの一致するYee格子電界点です。
36 関数名oth_frequency
機能周波数を指定します。必須です。
宣言void oth_frequency(double fstart, double fend, int div);
引数 fstart : 開始周波数[Hz]
fend : 終了周波数[Hz]
div : 周波数分割数
備考 単一周波数のときはfstart=fend, div=0として下さい。
37 関数名oth_pml
機能吸収境界条件にPMLを指定します。オプションです。
宣言void oth_pml(int l, double m, double r0);
引数 l : PML層数L
m : PML次数M
r0 : PML反射係数R0
備考 推奨値はl=5, m=2, r0=1e-5です。
本関数を呼び出さないときは吸収境界条件はMur一次になります。
38 関数名oth_pbc
機能周期境界条件を指定します。オプションです。
宣言void oth_pbc(int i0, int i1, int i2);
引数 i0 : X方向周期境界条件
i1 : Y方向周期境界条件
i2 : Z方向周期境界条件
39 関数名oth_solver
機能反復計算条件を指定します。オプションです。
宣言void oth_solver(int maxiter, int nout, double converg);
引数 maxiter : 最大反復回数
nout : 途中経過を出力する間隔
converg : 収束判定条件(通常1e-3~1e-5)
備考 本関数を呼び出さないときは適当な既定値が設定されますが、収束状況を見て適当に設定することが大切です。
40 関数名oth_matchingloss
機能アンテナの利得に整合損を含めます。オプションです。
宣言void oth_matchingloss(void);
引数 なし
備考 本関数を呼び出さないときはアンテナの利得は整合損を含みません。
41 関数名oth_plotiter
機能収束状況を2Dで図形出力します。オプションです。
宣言void oth_plotiter(int i0, int i1);
引数 i0 : 残差を図形出力します。
i1 : 平均電界誤差を図形出力します。
42 関数名oth_plotsmith
機能スミスチャートを2Dで図形出力します。オプションです。
宣言void oth_plotsmith(void);
引数 なし
43 関数名oth_plotzin
機能入力インピーダンスの周波数特性を2Dで図形出力します。オプションです。
宣言void oth_plotzin(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[Ω]
max : 最大[Ω]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
44 関数名oth_plotyin
機能入力アドミッタンスの周波数特性を2Dで図形出力します。オプションです。
宣言void oth_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"と入力してください。
45 関数名oth_plotref
機能反射係数の周波数特性を2Dで図形出力します。オプションです。
宣言void oth_plotref(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
46 関数名oth_plotspara
機能Sパラメーターの周波数特性を2Dで図形出力します。オプションです。
宣言void oth_plotspara(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
47 関数名oth_plotloss
機能全損失の周波数特性を2Dで図形出力します。オプションです。
宣言void oth_plotloss(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
48 関数名oth_plotcoupling
機能結合度の周波数特性を2Dで図形出力します。オプションです。
宣言void oth_plotcoupling(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
49 関数名oth_plotfar0d
機能指定した方向の遠方界の周波数特性を2Dで図形出力します。オプションです。
宣言void oth_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のときはダミーです。
50 関数名oth_freqdiv
機能周波数軸の分割数を指定します。オプションです。
宣言void oth_freqdiv(int div);
引数 div : 分割数
備考 本関数を呼び出さないときはdiv=10になります。
51 関数名oth_plotfar1d
機能遠方界面上パターンを2Dで図形出力します。複数回呼び出し可。オプションです。
宣言void oth_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度)
52 関数名oth_far1dstyle
機能遠方界面上パターンの図形出力の表示法を指定します。オプションです。
宣言void oth_far1dstyle(int i0);
引数 i0 : 0=円プロット、1=XYプロット。既定値は0です。
53 関数名oth_far1dcomponent
機能遠方界面上パターンの図形出力の成分を選択します。オプションです。
宣言void oth_far1dcomponent(int i0, int i1, int i2);
引数 i0=1 : θ成分とφ成分を図形出力します。
i1=1 : 楕円偏波の主軸と副軸を図形出力します。
i2=1 : 左右円偏波成分を図形出力します。
備考 本関数を呼び出さないときはi0=1, i1=0, i2=0になります。
54 関数名oth_far1ddb
機能遠方界面上パターンの図形出力の単位を指定します。オプションです。
宣言void oth_far1ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位はdBです。
55 関数名oth_far1dnorm
機能遠方界面上パターンの図形出力を最大値で正規化します。オプションです。
宣言void oth_far1dnorm(void);
引数 なし
備考 本関数を呼び出さないときは正規化しません。
56 関数名oth_far1dscale
機能遠方界面上パターンの図形出力のスケールを指定します。オプションです。
宣言void oth_far1dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
57 関数名oth_plotfar2d
機能遠方界全方向パターンを3Dで図形出力します。
宣言void oth_plotfar2d(int divtheta, int divphi);
引数 divtheta : θ方向(0-180度)の分割数
divphi : φ方向(0-360度)の分割数
備考 本関数は1回だけ有効です。
58 関数名oth_far2dcomponent
機能遠方界全方向パターンの図形出力の成分を選択します。オプションです。
宣言void oth_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 になります。
59 関数名oth_far2ddb
機能遠方界全方向パターンの図形出力の単位を指定します。オプションです。
宣言void oth_far2ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位はdBです。
60 関数名oth_far2dscale
機能遠方界全方向パターンの図形出力のスケールを指定します。オプションです。
宣言void oth_far2dscale(double min, double max);
引数 min : 最小値
max : 最大値
備考 本関数を呼び出さないときはスケールは自動設定されます。
61 関数名oth_far2dobj
機能遠方界全方向パターンの図形出力の物体表示の大きさを指定します。オプションです。
宣言void oth_far2dobj(double factor);
引数 factor : 相対的な大きさ
備考 本関数を呼び出さないときの既定値は0.5です。
62 関数名oth_plotnear1d
機能近傍界線上の電磁界分布を2Dで図形出力します。複数回呼び出し可。オプションです。
宣言void oth_plotnear1d(char component, char dir, double p1, double p2);
引数 component : 計算する成分('E', 'H'のどちらか)
dir : 線の向き('X', 'Y', 'Z'のいずれか)
p1, p2 : 線の座標、向きがXのときはY,Z座標、向きがYのときはZ,X座標、向きがZのときはX,Y座標
63 関数名oth_near1ddb
機能近傍界線上分布図の単位を指定します。オプションです。
宣言void oth_near1ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位は線形です。
64 関数名oth_near1dscale
機能近傍界線上分布図のスケールを指定します。オプションです。
宣言void oth_near1dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
65 関数名oth_near1dexclude
機能近傍界線上分布図の電磁界を指定します。オプションです。
宣言void oth_near1dexclude(int i0);
引数 i0=0:全電磁界(既定値),1:散乱電磁界,2:入射電磁界
備考 平面波入射のとき意味があります。
66 関数名oth_plotnear2d
機能近傍界面上の電磁界分布を2Dまたは3Dで図形出力します。複数回呼び出し可。オプションです。
宣言void oth_plotnear2d(const char component[], char dir, double p);
引数 component : 計算する成分("E", "Ex", "Ey", "Ez", "H", "Hx", "Hy", "Hz"のいずれか)
dir : 面の向き('X', 'Y', 'Z'のいずれか)
p : 面の座標
67 関数名oth_near2ddim
機能近傍界面上分布図の2D図と3D図を選択します。オプションです。
宣言void oth_near2ddim(int i0, int i1);
引数 i0 : 2D図を出力するか(0/1)。既定値は1です。
i1 : 3D図を出力するか(0/1)。既定値は1です。
68 関数名oth_near2dframe
機能近傍界面上分布図の動画のフレーム数を指定します。オプションです。
宣言void oth_near2dframe(int i0);
引数 i0 : 1周期のフレーム数
備考 本関数を呼び出さないときは動画は図形出力されません。
69 関数名oth_near2ddb
機能近傍界面上分布図の単位を指定します。オプションです。
宣言void oth_near2ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位は線形です。
70 関数名oth_near2dscale
機能近傍界面上分布図のスケールを指定します。オプションです。
宣言void oth_near2dscale(double min, double max);
引数 min : 最小値
max : 最大値
備考 本関数を呼び出さないときはスケールは自動設定されます。
71 関数名oth_near2dcontour
機能近傍界面上分布図の描画方法を指定します。オプションです。
宣言void oth_near2dcontour(int i0);
引数 i0 : 0=カラー精細(既定値)、1=カラー簡易、2=モノクロ精細、3=モノクロ簡易
72 関数名oth_near2dobj
機能近傍界面上分布図に物体を描くか。オプションです。
宣言void oth_near2dobj(int i0);
引数 i0 : 0=描かない、1=描く。既定値は1です。
73 関数名oth_near2dexclude
機能近傍界面上分布図の電磁界を指定します。オプションです。
宣言void oth_near2dexclude(int i0);
引数 i0=0:全電磁界(既定値),1:散乱電磁界,2:入射電磁界
備考 平面波入射のとき意味があります。
74 関数名oth_near2dzoom
機能近傍界面上分布図を一部を拡大します。オプションです。
宣言void oth_near2dzoom(double h0, double h1, double v0, double v1);
引数 h0,h1:横方向の下限と上限
v0,v1:縦方向の下限と上限
備考 面の向きがX/Y/Z方向のとき、横-縦は順にY-Z/X-Z/X-Yです。
77 関数名oth_outdata
機能出力ファイル名を指定します。必須です。
宣言void oth_outdata(const char file[]);
引数 file : 出力ファイル名。拡張子は".oth"推奨。

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

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

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


/*
sample1.c

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

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

#include "oth_datalib.h"

int main(void)
{
	// initialize

	oth_init();

	// title

	oth_title("sample1");

	// mesh

	oth_xsection(2, -75e-3, +75e-3);
	oth_xdivision(1, 30);

	oth_ysection(2, -75e-3, +75e-3);
	oth_ydivision(1, 30);

	oth_zsection(4, -72.5e-3, -22.5e-3, +22.5e-3, +72.5e-3);
	oth_zdivision(3, 10, 9, 10);

	// material

	oth_material(2.0, 0.0, 1.0, 0.0);   // not used

	// geometry

	oth_geometry(1, 1, 0e-3, 0e-3, 0e-3, 0e-3, -22.5e-3, +22.5e-3);
	oth_name("dipole");

	// source

	oth_feed('Z', 0e-3, 0e-3, 0e-3, 1, 0, 50);

	// ABC

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

	// frequency

	oth_frequency(2e9, 3e9, 5);

	// solver

	oth_solver(2000, 100, 1e-4);

	// iteration

	oth_plotiter(1, 1);

	// frequency char.s

	oth_plotsmith();
	oth_plotzin(1, 0, 0, 0);
	oth_plotyin(1, 0, 0, 0);
	oth_plotref(1, 0, 0, 0);
	//oth_plotfar0d(90, 0, 1, 0, 0, 0);
	//oth_freqdiv(10);

	// far-1d

	oth_plotfar1d('X', 72, 0);

	// far-2d

	oth_plotfar2d(18, 36);

	// near-1d

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

	// near-2d

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

	// output options

	//oth_far1dstyle(1);
	//oth_far1dcomponent(1, 0, 0);
	//oth_far1ddb(1);
	//oth_far1dscale(-30, +10, 4);
	//oth_far2dcomponent(1, 0, 0, 0, 0, 0,0);
	//oth_far2ddb(1);
	//oth_far2dscale(-30, +10);
	//oth_far2dobj(0.5);
	//oth_near1ddb(1);
	//oth_near1dscale(-30, +10, 4);
	//oth_near1dexclude();
	//oth_near2ddb(1);
	//oth_near2dscale(-30, +10);
	//oth_near2ddim(1, 1);
	//oth_near2dcontour(0);
	//oth_near2dobj(1);
	//oth_near2dexclude();
	//oth_near2dzoom(-50e-3, +50e-3, -50e-3, +50e-3);

	// output

	oth_outdata("sample1.oth");

	return 0;
}

コンパイル・実行方法

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

Windows+VC++の場合

> cl.exe /O2 sample1.c oth_datalib.c
> sample1.exe
Linux+gccの場合
$ gcc -O sample1.c oth_datalib.c -o sample1
$ ./sample1
以上でファイル(ここではsample1.oth)が出力されます。
リスト4-7-2に出力されたファイルを示します。
このファイルがOpenTHFDの入力データになります。

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


OpenTHFD 4 0
title = sample1
xmesh = -0.075 30 0.075
ymesh = -0.075 30 0.075
zmesh = -0.0725 10 -0.0225 9 0.0225 10 0.0725
material = 1 2 0 1 0
geometry = 1 1 0 0 0 0 -0.0225 0.0225
name = dipole
feed = Z 0 0 0 1 0 50
frequency = 2e+09 3e+09 5
solver = 2000 100 0.0001
plotiter = 1 1
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
near2ddb = 0
near2ddim = 1 1
near2dcontour = 0
near2dobj = 1
end