3.8 データ作成ライブラリ

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

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

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

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

  1. 関数名はすべて小文字で"omm_"で始まります。
  2. 引数のうち実数はすべてdoubleです。
  3. 単位はすべてMKSA単位系です。角度の単位は度です。
  4. 関数の呼び出し順は、最初がomm_init、最後がomm_outdatです。 その他の関数の呼び出し順は任意ですが、表の順に呼ぶことを推奨します。
  5. 必須関数とオプション関数があります。必須関数は濃い色で表示しています。 オプション関数を呼び出さないときは既定値が設定されます。
  6. 複数回呼び出すことができる関数があります。そのときは複数個のデータが出力されます。
  7. 一度だけ呼び出せばよい関数を複数回呼び出したときは最後の呼び出しが有効になります。

表3-8-1 データ作成ライブラリ関数一覧
1 関数名omm_init
機能初期化します。必須です。
宣言void omm_init();
備考 他のすべての関数の前に一度呼び出すことが必要です。
2 関数名omm_title
機能データにタイトルを付けます。オプションです。
宣言void omm_title(const char title[]);
引数 title : タイトル
備考 計算結果には関係ありませんが、データの管理に使用します。
3 関数名omm_geometry_wire
機能線分の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_wire(int cosys, double x1, double x2, double y1, double y2, double z1, double z2, int div);
引数 cosys : 1=XYZ座標、2=円筒座標、3=極座標
x1 : 点1のX座標
x2 : 点2のX座標
y1 : 点1のY座標
y2 : 点2のY座標
z1 : 点1のZ座標
z2 : 点2のZ座標
div : 分割数
備考 X/Y/Zは円筒座標のときはρ/φ/Zに、極座標のときはr/θ/φに読み替えてください。
4 関数名omm_geometry_xline
機能X方向線分の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_xline(double x1, double x2, double y, double z, int div);
引数 x1 : 点1のX座標
x2 : 点2のX座標
y : Y座標
z : Z座標
div : 分割数
5 関数名omm_geometry_yline
機能X方向線分の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_yline(double y1, double y2, double z, double x, int div);
引数 y1 : 点1のY座標
y2 : 点2のY座標
z : Z座標
x : X座標
div : 分割数
6 関数名omm_geometry_zline
機能X方向線分の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_zline(double z1, double z2, double x, double y, int div);
引数 z1 : 点1のZ座標
z2 : 点2のZ座標
x : X座標
y : Y座標
div : 分割数
7 関数名omm_geometry_plane
機能4角形の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_plane(int cosys, double x1, double x2, double x3, double x4, double y1, double y2, double y3, double y4, double z1, double z2, double z3, double z4, int div1, int div2);
引数 cosys : 1=XYZ座標、2=円筒座標、3=極座標
x1 : 点1のX座標
x2 : 点2のX座標
x3 : 点3のX座標
x4 : 点4のX座標
y1 : 点1のY座標
y2 : 点2のY座標
y3 : 点3のY座標
y4 : 点4のY座標
z1 : 点1のZ座標
z2 : 点2のZ座標
z3 : 点3のZ座標
z4 : 点4のZ座標
div1 : 点1-2方向の分割数
div2 : 点1-4方向の分割数
備考 X/Y/Zは円筒座標のときはρ/φ/Zに、極座標のときはr/θ/φに読み替えてください。
8 関数名omm_geometry_xrect
機能X面長方形の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_xrect(double x, double y1, double y2, double z1, double z2, int div1, int div2);
引数 x : 面のX座標
y1 : Y座標下限
y2 : Y座標上限
z1 : Z座標下限
z2 : Z座標上限
div1 : Y方向分割数
div2 : Z方向分割数
9 関数名omm_geometry_yrect
機能Y面長方形の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_yrect(double y, double z1, double z2, double x1, double x2, int div1, int div2);
引数 y : 面のY座標
z1 : Z座標下限
z2 : Z座標上限
x1 : X座標下限
x2 : X座標上限
div1 : Z方向分割数
div2 : X方向分割数
10 関数名omm_geometry_zrect
機能Z面長方形の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_zrect(double z, double x1, double x2, double y1, double y2, int div1, int div2);
引数 z : 面のZ座標
x1 : X座標下限
x2 : X座標上限
y1 : Y座標下限
y2 : Y座標上限
div1 : X方向分割数
div2 : Y方向分割数
11 関数名omm_geometry_box
機能直方体の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_box(int cosys, double x1, double x2, double y1, double y2, double z1, double z2, int div1, int div2, int div3);
引数 cosys : 1=XYZ座標、2=円筒座標、3=極座標
x1 : X座標下限
x2 : X座標上限
y1 : Y座標下限
y2 : Y座標上限
z1 : Z座標下限
z2 : Z座標上限
div1 : X方向分割数
div2 : Y方向分割数
div3 : Z方向分割数
備考 直方体は6個の面状ユニットに分解されます。
X/Y/Zは円筒座標のときはρ/φ/Zに、極座標のときはr/θ/φに読み替えてください。
12 関数名omm_feed
機能直前に呼び出した幾何形状に給電点を設定します。少なくとも1個必要です。
宣言void omm_feed(double v, double a);
引数 v : 振幅[V]
a : 位相[度]
備考 線状ユニットに限定されます。
13 関数名omm_load
機能直前に呼び出した幾何形状に負荷を設定します。オプションです。
宣言void omm_load(int iload, double load);
引数 iload : 1=抵抗R, 2=インダクタL, 3=キャパシタC
load : iload=1のときR[Ω]、iload=2のときL[H]、iload=3のときC[F]
備考 線状ユニットに限定されます。
14 関数名omm_radius
機能直前に呼び出した幾何形状に導線半径を設定します。オプションです。
宣言void omm_radius(double radius);
引数 radius : 導線半径
備考 本関数を呼び出さないユニットにはomm_radiusall関数が設定されます。
15 関数名omm_offset
機能直前に呼び出した幾何形状を平行移動します。オプションです。
宣言void omm_offset(double x, double y, double z);
引数 x : X方向平行移動
y : Y方向平行移動
z : Z方向平行移動
16 関数名omm_name
機能直前に呼び出した幾何形状に名前を与えます。オプションです。
宣言void omm_name(const char name[]);
引数 name : 名前
備考 本関数はデータの管理に使用するものであり、計算結果に影響を与えません。
17 関数名omm_frequency
機能周波数を指定します。必須です。
宣言void omm_frequency(double fstart, double fstop, int fdiv);
引数 fstart : 開始周波数[Hz]
fstop : 終了周波数[Hz]
fdiv : 周波数分割数
備考 単一周波数のときはfstart=fstop, fdiv=0としてください。
18 関数名omm_z0
機能給電線の特性インピーダンスを指定します。オプションです。
宣言void omm_z0(double z0);
引数 z0 : 給電線の特性インピーダンス[Ω]
備考 本関数を呼び出さないときは既定値(z0=50)になります。
19 関数名omm_radiusall
機能導線半径を指定します。オプションです。
宣言void omm_radiusall(int i, double r);
引数 i : 1=導線半径を指定します。2=導線半径/要素長[無次元]を指定します。
r : 上の値
備考 本関数を呼び出さないときは既定値(i=2, r=0.2)になります。
20 関数名omm_geom3dnode
機能形状確認3D図の線状ユニットの節点の大きさを指定します。オプションです。
宣言void omm_geom3dnode(double r);
引数 r : 節点の大きさ/要素長[無次元]
備考 本関数を呼び出さないときは既定値(r=0.05)になります。 本関数は計算結果に影響を与えません。
21 関数名omm_plotcurrent
機能収束状況を図形出力します。オプションです。
宣言void omm_plotcurrent();
引数なし
22 関数名omm_plotfrequency
機能周波数特性の図形出力の項目を選択します。オプションです。
宣言void omm_plotfrequency(int i0, int i1, int i2, int i3);
引数 i0=1 : スミスチャートを図形出力します。
i1=1 : 入力インピーダンスを図形出力します。
i2=1 : 入力アドミッタンスを図形出力します。
i3=1 : 反射損失を図形出力します。
23 関数名omm_plotfar1d
機能遠方界面上パターンを図形出力します。複数回呼び出し可。
宣言void omm_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度)
24 関数名omm_far1dstyle
機能遠方界面上パターンの図形出力の表示法を指定します。オプションです。
宣言void omm_far1dstyle(int i0);
引数 i0 : 0=円プロット、1=XYプロット。既定値は0です。
25 関数名omm_far1dcomponent
機能遠方界面上パターンの図形出力の成分を選択します。オプションです。
宣言void omm_far1dcomponent(int i0, int i1, int i2);
引数 i0=1 : θ成分とφ成分を図形出力します。
i1=1 : 楕円偏波の主軸と副軸を図形出力します。
i2=1 : 左右円偏波成分を図形出力します。
備考 本関数を呼び出さないときはi0=1, i1=0, i2=0になります。
26 関数名omm_far1ddb
機能遠方界面上パターンの図形出力の単位を指定します。オプションです。
宣言void omm_far1ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位はdBです。
27 関数名omm_far1dscale
機能遠方界面上パターンの図形出力のスケールを指定します。オプションです。
宣言void omm_far1dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
28 関数名omm_plotfar2d
機能遠方界全方向パターンを図形出力します。
宣言void omm_plotfar2d(int divtheta, int divphi);
引数 divtheta : θ方向(0-180度)の分割数
divphi : φ方向(0-360度)の分割数
備考 本関数は1回だけ有効です。
29 関数名omm_far2dcomponent
機能遠方界全方向パターンの図形出力の成分を選択します。オプションです。
宣言void omm_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 になります。
30 関数名omm_far2ddb
機能遠方界全方向パターンの図形出力の単位を指定します。オプションです。
宣言void omm_far2ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位はdBです。
31 関数名omm_far2dscale
機能遠方界全方向パターンの図形出力のスケールを指定します。オプションです。
宣言void omm_far2dscale(double min, double max);
引数 min : 最小値
max : 最大値
備考 本関数を呼び出さないときはスケールは自動設定されます。
32 関数名omm_plotnear1d
機能近傍界の線上分布図を図形出力します。複数回呼び出し可。
宣言void omm_plotnear1d(char cmp, double x1, double x2, double y1, double y2, double z1, double z2, int div);
引数 cmp : 成分('E', 'H'のどちらか)
x1 : 始点のX座標
x2 : 終点のX座標
y1 : 始点のY座標
y2 : 終点のY座標
z1 : 始点のZ座標
z2 : 終点のZ座標
div : 線分の分割数
33 関数名omm_near1ddb
機能近傍界線上分布図の単位を指定します。オプションです。
宣言void omm_near1ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位は線形です。
34 関数名omm_near1dscale
機能近傍界線上分布図のスケールを指定します。オプションです。
宣言void omm_near1dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
35 関数名omm_plotnear2d
機能近傍界の面上分布図を図形出力します。複数回呼び出し可。
宣言void omm_plotnear2d(const char cmp[], char dir, double p0, double p1, double p2, double p3, double p4, int div0, int div1);
引数 cmp : 成分("E", "Ex", "Ey", "Ez", "H", "Hx", "Hy", "Hz"のいずれか)
dir : 面の向き('X', 'Y', 'Z'のいずれか)
p0 : 面の座標(X面のときX、Y面のときY、Z面のときZ)
p1 : 左座標(X面のときY1、Y面のときZ1、Z面のときX1)
p2 : 右座標(X面のときY2、Y面のときZ2、Z面のときX2)
p3 : 下座標(X面のときZ1、Y面のときX1、Z面のときY1)
p4 : 上座標(X面のときZ2、Y面のときX2、Z面のときY2)
div0 : 横方向分割数
div1 : 縦方向分割数
36 関数名omm_near2ddb
機能近傍界面上分布図の単位を指定します。オプションです。
宣言void omm_near2ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位は線形です。
37 関数名omm_near2dscale
機能近傍界面上分布図のスケールを指定します。オプションです。
宣言void omm_near2dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
38 関数名omm_near2dobj
機能近傍界面上分布図に物体を描くか。オプションです。
宣言void omm_near2dobj(int i0);
引数 i0 : 0=描かない、1=表面を描く、2=すべての線状要素を描く。既定値は1です。
39 関数名omm_window2d
機能図形出力2Dウィンドウの大きさとフォントサイズを指定します。オプションです。
宣言void omm_window2d(int w, int h, int font);
引数 w : ウィンドウの幅(ピクセル)
h : ウィンドウの高さ(ピクセル)
font : フォントサイズ(ピクセル)
備考 既定値は w=750, h=500, font=15 です。
40 関数名omm_window3d
機能図形出力3Dウィンドウの大きさと初期視点を指定します。オプションです。
宣言void omm_window3d(int w, int h, double theta, double phi);
引数 w : ウィンドウの幅(ピクセル)
h : ウィンドウの高さ(ピクセル)
theta : 初期視点のθ[度]
phi : 初期視点のφ[度]
備考 既定値は w=500, h=500, theta=60, phi=30 です。
41 関数名omm_outdat
機能出力ファイル名を指定します。必須です。
宣言void omm_outdat(const char file[]);
引数 file : 出力ファイル名。拡張子は".omm"推奨。

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


リスト3-8-1 データ作成ライブラリ用サンプルプログラム
/*
sample1.c

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

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

#include "omm_datalib.h"

int main()
{
	// initialize

	omm_init();

	// title

	omm_title("sample1");

	// geometry

	omm_geometry_zline(-25e-3, +25e-3, 0e-3, 0e-3, 25);  // dipole
	omm_feed(1, 0);

	// frequency

	omm_frequency(2e9, 3e9, 10);

	// current distribution

	//omm_plotcurrent();

	// frequency char.

	omm_plotfrequency(1, 1, 1, 1);

	// far1d field

	omm_plotfar1d('X', 72, 0);

	//omm_far1dstyle(0);
	//omm_far1dcomponent(1, 0, 0);
	//omm_far1ddb(1);
	//omm_far1dscale(-30, +10, 4);

	// far2d field

	//omm_plotfar2d(18, 36);

	//omm_far2dcomponent(1, 0, 0, 0, 0, 0, 0);
	//omm_far2ddb(1);
	//omm_far2dscale(-20, +10);

	// near1d field

	//omm_plotnear1d('E', +50e-3, +50e-3, 0e-3, 0e-3, -50e-3, +50e-3, 100);

	//omm_near1ddb(1);
	//omm_near1dscale(-30, +20, 5);

	// near2d field

	//omm_plotnear2d("E", 'X', 10e-3, -50e-3, +50e-3, -50e-3, +50e-3, 20, 20);

	//omm_near2ddb(1);
	//omm_near2dscale(-30, +20, 0);
	//omm_near2dobj(1);

	// window size

	//omm_window2d(600, 400, 12);
	//omm_window3d(500, 500, 60, 30);

	// output

	omm_outdat("sample1.omm");

	return 0;
}

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

Windows+VC++の場合

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


リスト3-8-2 データ作成ライブラリのサンプルデータ
OpenMOM 1 3
title = sample1
geometry = 1 13 -2.500000e-02 2.500000e-02 0.000000e+00 0.000000e+00 25
feed = 1.000000 0.000000
frequency = 2.0000e+09 3.0000e+09 10
z0 = 50.000
geom3dnode = 0.050 1 0
plotfrequency = 1 1 1 1
plotfar1d = X 72
far1dstyle = 0
far1dcomponent = 1 0 0
far1ddb = 1
end