本プログラムにはデータ作成ライブラリが添付しています。
これはC言語のプログラムを作成して入力データを出力するためのライブラリです。
以下のような用途に使用します。
ファイル構成
datalibフォルダにデータ作成ライブラリのソースコード(ofd_datalib.c)
とヘッダーファイル(ofd_datalib.h)があります。
ユーザーがプログラムを作成するときはofd_datalib.hをincludeし、
コンパイル時にofd_datalib.cを追加してください。
関数一覧
表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 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; }