目次

4.7 データ作成ライブラリ

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

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

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

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

  1. 関数名はすべて小文字で"omm_"で始まります。
  2. 引数のうち実数はすべてdoubleです。
  3. 単位はすべてMKSA単位系です。角度の単位は度です。
  4. 関数の呼び出し順は、最初がomm_init、最後がomm_outdataです。 その他の関数の呼び出し順は任意ですが、表の順に呼ぶことを推奨します。
  5. 必須関数とオプション関数があります。必須関数は濃い色で表示しています。 オプション関数を呼び出さないときは既定値が設定されます。
  6. 複数回呼び出すことができる関数があります。そのときは複数個のデータが出力されます。
  7. 一度だけ呼び出せばよい関数を複数回呼び出したときは最後の呼び出しが有効になります。
表4-7-1 データ作成ライブラリ関数一覧
1 関数名omm_init
機能初期化します。必須です。
宣言void omm_init(void);
備考 他のすべての関数の前に一度呼び出すことが必要です。
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_triangle
機能三角形の幾何形状を入力します。複数回呼び出し可。
宣言void omm_geometry_triangle(double x1, double x2, double x3, double y1, double y2, double y3, double z1, double z2, double z3);
引数 (x1, y1, z1) : 頂点1のXYZ座標
(x2, y2, x2) : 頂点2のXYZ座標
(x3, y3, z3) : 頂点3のXYZ座標
備考 3辺の分割数はすべて1です。
8 関数名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/θ/φに読み替えてください。
9 関数名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方向分割数
10 関数名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方向分割数
11 関数名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方向分割数
12 関数名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/θ/φに読み替えてください。
13 関数名omm_feed
機能直前に呼び出した幾何形状に給電点を設定します。
宣言void omm_feed(double v, double a);
引数 v : 振幅[V]
a : 位相[度]
備考 線状ユニットに限定されます。
給電点と平面波入射のどちらかが必要です。
14 関数名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]
備考 線状ユニットに限定されます。
15 関数名omm_radius
機能直前に呼び出した幾何形状に導線半径を設定します。オプションです。
宣言void omm_radius(double radius);
引数 radius : 導線半径
備考 本関数を呼び出さないユニットにはomm_radiusall関数が設定されます。
16 関数名omm_offset
機能直前に呼び出した幾何形状を平行移動します。オプションです。
宣言void omm_offset(double x, double y, double z);
引数 x : X方向平行移動
y : Y方向平行移動
z : Z方向平行移動
17 関数名omm_name
機能直前に呼び出した幾何形状に名前を与えます。オプションです。
宣言void omm_name(const char name[]);
引数 name : 名前
備考 本関数はデータの管理に使用するものであり、計算結果に影響を与えません。
18 関数名omm_planewave
機能平面波入射を指定します。
宣言void omm_planewave(double theta, double phi, int pol);
引数 theta : 原点から見た入射方向のθ[度]
phi : 原点から見た入射方向のφ[度]
pol : 偏波(1/2/3/4:垂直/水平/右旋円偏波/左旋円偏波)
備考 給電点と平面波入射のどちらかが必要です。
19 関数名omm_planewave_ellipse
機能楕円偏波の平面波入射を指定します。
宣言void omm_planewave_ellipse(double theta, double phi, double a, double r);
引数 theta : 原点から見た入射方向のθ[度]
phi : 原点から見た入射方向のφ[度]
a : 主軸のθ軸からφ軸への傾き[度]
r : 軸比(-1≤r≤+1)
備考 給電点と平面波入射のどちらかが必要です。
20 関数名omm_ground
機能グラウンド板を指定します。
宣言void omm_ground(void);
引数 なし
備考 グラウンド板はZ=0面の無限に広い完全導体です。
本関数を呼び出さないときはグラウンド板はありません。
21 関数名omm_frequency
機能周波数を指定します。必須です。
宣言void omm_frequency(double fstart, double fstop, int fdiv);
引数 fstart : 開始周波数[Hz]
fstop : 終了周波数[Hz]
fdiv : 周波数分割数
備考 単一周波数のときはfstart=fstop, fdiv=0としてください。
22 関数名omm_z0
機能給電線の特性インピーダンスを指定します。オプションです。
宣言void omm_z0(double z0);
引数 z0 : 給電線の特性インピーダンス[Ω]
備考 本関数を呼び出さないときは既定値(z0=50)になります。
23 関数名omm_radiusall
機能導線半径を指定します。オプションです。
宣言void omm_radiusall(int i, double r);
引数 i : 1=導線半径を指定します。2=導線半径/要素長[無次元]を指定します。
r : 上の値
備考 本関数を呼び出さないときは既定値(i=2, r=0.2)になります。
24 関数名omm_geom3dnode
機能形状確認3D図の節点の大きさを指定します。オプションです。
宣言void omm_geom3dnode(double r, int i0, int i1);
引数 r : 節点の大きさ/要素長[無次元]
i0=1 : 線状ユニットについて図形出力する
i1=1 : 面状ユニットについて図形出力する
備考 本関数を呼び出さないときは線状ユニットのみr=0.05で図形出力します。 本関数は計算結果に影響を与えません。
25 関数名omm_matchingloss
機能利得に整合損を含めます。オプションです。
宣言void omm_matchingloss(void);
備考 本関数を呼び出さないときは利得に整合損を含めません。
26 関数名omm_plotcurrent
機能電流分布を2Dまたは3Dで図形出力します。オプションです。
宣言void omm_plotcurrent(int i2d, int i3d);
引数 i2d=1 : 2Dで図形出力します。
i3d=1 : 3Dで図形出力します。
27 関数名omm_plotsmith
機能スミスチャートを2Dで図形出力します。オプションです。
宣言void omm_plotsmith(void);
引数 なし
28 関数名omm_plotzin
機能入力インピーダンスの周波数特性を2Dで図形出力します。オプションです。
宣言void omm_plotzin(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[Ω]
max : 最大[Ω]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
29 関数名omm_plotyin
機能入力アドミッタンスの周波数特性を2Dで図形出力します。オプションです。
宣言void omm_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"と入力してください。
30 関数名omm_plotref
機能反射係数の周波数特性を2Dで図形出力します。オプションです。
宣言void omm_plotref(int scale, double min, double max, int div);
引数 scale=1/2 : 自動スケール/指定スケール
min : 最小[dB]
max : 最大[dB]
div : 分割数
備考 min, max, divはscale=2のとき意味があり、scale=1のときはダミーです。
31 関数名omm_plotfar0d
機能指定した方向の遠方界の周波数特性を2Dで図形出力します。オプションです。
宣言void omm_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のときはダミーです。
32 関数名omm_freqdiv
機能周波数軸の分割数を指定します。オプションです。
宣言void omm_freqdiv(int div);
引数 div : 分割数
備考 本関数を呼び出さないときはdiv=10になります。
33 関数名omm_plotfar1d
機能遠方界面上パターンを2Dで図形出力します。複数回呼び出し可。
宣言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度)
34 関数名omm_far1dstyle
機能遠方界面上パターンの図形出力の表示法を指定します。オプションです。
宣言void omm_far1dstyle(int i0);
引数 i0 : 0=円プロット、1=XYプロット。既定値は0です。
35 関数名omm_far1dcomponent
機能遠方界面上パターンの図形出力の成分を選択します。オプションです。
宣言void omm_far1dcomponent(int i0, int i1, int i2);
引数 i0=1 : θ成分とφ成分を図形出力します。
i1=1 : 楕円偏波の主軸と副軸を図形出力します。
i2=1 : 左右円偏波成分を図形出力します。
備考 本関数を呼び出さないときはi0=1, i1=0, i2=0になります。
36 関数名omm_far1ddb
機能遠方界面上パターンの図形出力の単位を指定します。オプションです。
宣言void omm_far1ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位はdBです。
37 関数名omm_far1dnorm
機能遠方界面上パターンの図形出力を最大値で正規化します。オプションです。
宣言void omm_far1dnorm(void);
引数 なし
備考 本関数を呼び出さないときは正規化しません。
38 関数名omm_far1dscale
機能遠方界面上パターンの図形出力のスケールを指定します。オプションです。
宣言void omm_far1dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
39 関数名omm_plotfar2d
機能遠方界全方向パターンを3Dで図形出力します。
宣言void omm_plotfar2d(int divtheta, int divphi);
引数 divtheta : θ方向(0-180度)の分割数
divphi : φ方向(0-360度)の分割数
備考 本関数は1回だけ有効です。
40 関数名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 になります。
41 関数名omm_far2ddb
機能遠方界全方向パターンの図形出力の単位を指定します。オプションです。
宣言void omm_far2ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位はdBです。
42 関数名omm_far2dscale
機能遠方界全方向パターンの図形出力のスケールを指定します。オプションです。
宣言void omm_far2dscale(double min, double max);
引数 min : 最小値
max : 最大値
備考 本関数を呼び出さないときはスケールは自動設定されます。
43 関数名omm_far2dobj
機能遠方界全方向パターンの図形出力に描く物体形状の相対的な大きさを指定します。オプションです。
宣言void omm_far2dobj(double obj);
引数 obj : 大きさ
備考 本関数を呼び出さないときは0.5が指定されます。
0のときは物体形状は描かれません。
44 関数名omm_plotnear1d
機能近傍界の線上分布図を2Dで図形出力します。複数回呼び出し可。
宣言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 : 線分の分割数
45 関数名omm_near1ddb
機能近傍界線上分布図の単位を指定します。オプションです。
宣言void omm_near1ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位は線形です。
46 関数名omm_near1dscale
機能近傍界線上分布図のスケールを指定します。オプションです。
宣言void omm_near1dscale(double min, double max, int div);
引数 min : 最小値
max : 最大値
div : 分割数
備考 本関数を呼び出さないときはスケールは自動設定されます。
47 関数名omm_plotnear2d
機能近傍界の面上分布図を2Dと3Dで図形出力します。複数回呼び出し可。
宣言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 : 縦方向分割数
48 関数名omm_near2ddim
機能近傍界面上分布図を2Dまたは3Dで図形出力します。オプションです。
宣言void omm_near2ddim(int i0, int i1);
引数 i0=0/1 : 2Dで図形出力しない/する
i1=0/1 : 3Dで図形出力しない/する
備考 本関数を呼び出さないときは2Dと3Dで図形出力します。
49 関数名omm_near2dframe
機能近傍界面上分布図の動画のフレーム数を指定します。オプションです。
宣言void omm_near2dframe(int i0);
引数 i0 : 1周期のフレーム数
備考 本関数を呼び出さないときは動画は図形出力されません。
50 関数名omm_near2ddb
機能近傍界面上分布図の単位を指定します。オプションです。
宣言void omm_near2ddb(int i0);
引数 i0 : 0=線形、1=dB
備考 本関数を呼び出さないときは単位は線形です。
51 関数名omm_near2dscale
機能近傍界面上分布図のスケールを指定します。オプションです。
宣言void omm_near2dscale(double min, double max);
引数 min : 最小値
max : 最大値
備考 本関数を呼び出さないときはスケールは自動設定されます。
52 関数名omm_near2dcontour
機能近傍界面上分布図の描画方法を選択します。オプションです。
宣言void omm_near2dcontour(int i0);
引数 i0 : 0=カラー精細、1=カラー簡易、2=モノクロ精細、3=モノクロ簡易。既定値は0です。
53 関数名omm_near2dobj
機能近傍界面上分布図に物体形状を描くか。オプションです。
宣言void omm_near2dobj(int i0);
引数 i0 : 0=描かない、1=描く。既定値は1です。
56 関数名omm_outdata
機能出力ファイル名を指定します。必須です。
宣言void omm_outdata(const char file[]);
引数 file : 出力ファイル名。拡張子は".omm"推奨。

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

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


/*
sample1.c

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

コンパイル+実行:
Windows + VC++:
> cl.exe /O2 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(void)
{
	// 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(1, 1);

	// frequency char.

	omm_plotsmith();
	omm_plotzin(1, 0, 0, 0);
	omm_plotyin(1, 0, 0, 0);
	omm_plotref(1, 0, 0, 0);

	// far0d field

	//omm_plotfar0d(90, 0, 1, 0, 0, 0);

	// far1d field

	//omm_plotfar1d('X', 180, 0);

	//omm_far1dstyle(0);
	//omm_far1dcomponent(1, 0, 0);
	//omm_far1ddb(1);
	//omm_far1dnorm();
	//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);
	//omm_far2dobj(0.5);

	// 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);
	//omm_near2dcontour(0);
	//omm_near2dobj(1);

	// output

	omm_outdata("sample1.omm");

	return 0;
}

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

Windows+VC++の場合

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

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


OpenMOM 4 0
title = sample1
geometry = 1 13 -0.025 0.025 0 0 25
feed = 1 0
frequency = 2e+09 3e+09 10
z0 = 50
geom3dnode = 0.05 1 0
plotsmith = 1
plotzin = 1
plotyin = 1
plotref = 1
end