本プログラムにはデータ作成ライブラリが添付しています。
これはC言語のプログラムを作成して入力データを出力するためのライブラリです。
以下のような用途に使用します。
ファイル構成
datalibフォルダにデータ作成ライブラリのソースコード(ost_datalib.c)
とヘッダーファイル(ost_datalib.h)があります。
ユーザーがプログラムを作成するときはost_datalib.hをincludeし、
ビルド時にost_datalib.cを追加して下さい。
関数一覧
表4-7-1に関数一覧を示します。
関数については以下の規則があります。
1 関数名 | ost_init |
機能 | 初期化します。必須です。 |
宣言 | void ost_init(void); |
備考 |
他のすべての関数の前に一度呼び出すことが必要です。 |
2 関数名 | ost_section_size |
機能 | 区間の最大数を指定します。オプションです。 |
宣言 | void ost_section_size(int size); |
引数 |
size : 区間の最大数(既定値:1000) |
備考 |
2~5の関数はost_initの直後に呼び出すことが必要です。 |
3 関数名 | ost_unit_size |
機能 | ユニット(物体形状)の最大数を指定します。オプションです。 |
宣言 | void ost_geometry_size(int size); |
引数 |
size : 幾何形状の最大数(既定値:100000) |
備考 |
2~5の関数はost_initの直後に呼び出すことが必要です。 |
4 関数名 | ost_1d_size |
機能 | 近傍界観測線の最大数を指定します。オプションです。 |
宣言 | void ost_near1d_size(int size); |
引数 |
size : 近傍界観測線の最大数(既定値:1000) |
備考 |
2-5の関数はost_initの直後に呼び出すことが必要です。 |
5 関数名 | ost_2d_size |
機能 | 近傍界観測面の最大数を指定します。オプションです。 |
宣言 | void ost_near2d_size(int size); |
引数 |
size : 近傍界観測面の最大数(既定値:1000) |
備考 |
2~5の関数はost_initの直後に呼び出すことが必要です。 |
6 関数名 | ost_title |
機能 | データにタイトルを付けます。オプションです。 |
宣言 | void ost_title(const char title[]); |
引数 |
title : タイトル |
備考 |
計算結果には関係ありませんが、データの管理に使用します。 |
7 関数名 | ost_xsection1 |
機能 | X方向の区間区切り位置を追加します。複数回呼び出し可。 |
宣言 | void ost_xsection1(double x); |
引数 |
x : X方向の区間区切り位置 |
8 関数名 | ost_ysection1 |
機能 | Y方向の区間区切り位置を追加します。複数回呼び出し可。 |
宣言 | void ost_ysection1(double y); |
引数 |
y : Y方向の区間区切り位置 |
9 関数名 | ost_zsection1 |
機能 | Z方向の区間区切り位置を追加します。複数回呼び出し可。 |
宣言 | void ost_zsection1(double z); |
引数 |
z : Z方向の区間区切り位置 |
10 関数名 | ost_xdivision1 |
機能 | X方向の区間分割数を追加します。複数回呼び出し可。 |
宣言 | void ost_xdivision1(int n); |
引数 |
n : X方向の区間分割数 |
11 関数名 | ost_ydivision1 |
機能 | Y方向の区間分割数を追加します。複数回呼び出し可。 |
宣言 | void ost_ydivision1(int n); |
引数 |
n : Y方向の区間分割数 |
12 関数名 | ost_zdivision1 |
機能 | Z方向の区間分割数を追加します。複数回呼び出し可。 |
宣言 | void ost_zdivision1(int n); |
引数 |
n : Z方向の区間分割数 |
13 関数名 | ost_xsection |
機能 | X方向の区間区切り位置を指定します。 |
宣言 | void ost_xsection(int n, ...); |
引数 |
n : X方向の区間区切り位置の数(=X方向の区間数+1) ... : X方向の区間区切り位置(n個のdouble型数値) |
14 関数名 | ost_ysection |
機能 | Y方向の区間区切り位置を指定します。 |
宣言 | void ost_ysection(int n, ...); |
引数 |
n : Y方向の区間区切り位置の数(=Y方向の区間数+1) ... : Y方向の区間区切り位置(n個のdouble型数値) |
15 関数名 | ost_zsection |
機能 | Z方向の区間区切り位置を指定します。 |
宣言 | void ost_zsection(int n, ...); |
引数 |
n : Z方向の区間区切り位置の数(=Z方向の区間数+1) ... : Z方向の区間区切り位置(n個のdouble型数値) |
16 関数名 | ost_xdivision |
機能 | X方向の区間分割数を指定します。 |
宣言 | void ost_xdivision(int n, ...); |
引数 |
n : X方向の区間数 ... : X方向の区間分割数(n個のint型整数) |
17 関数名 | ost_ydivision |
機能 | Y方向の区間分割数を指定します。 |
宣言 | void ost_ydivision(int n, ...); |
引数 |
n : Y方向の区間数 ... : Y方向の区間分割数(n個のint型整数) |
18 関数名 | ost_zdivision |
機能 | Z方向の区間分割数を指定します。 |
宣言 | void ost_zdivision(int n, ...); |
引数 |
n : Z方向の区間数 ... : Z方向の区間分割数(n個のint型整数) |
19 関数名 | ost_volt |
機能 | 電極の電圧を追加します。2回以上の呼び出しが必要。 |
宣言 | void ost_volt(double volt); |
引数 |
volt : 電極の電圧[V] |
備考 | 入力した順に電極電圧番号1,2,...が与えられます。 |
20 関数名 | ost_volt_name |
機能 | 直前に入力した電極電圧データに名前を付けます。オプションです。 |
宣言 | void ost_volt_name(const char name[]); |
引数 |
name : 名前 |
備考 |
本関数はデータの管理に使用するものであり、計算結果に影響を与えません。 |
21 関数名 | ost_epsr |
機能 | 誘電体の比誘電率を追加します。複数回呼び出し可。 |
宣言 | void ost_epsr(double epsr); |
引数 |
epsr : 誘電体の比誘電率 |
備考 | 入力した順に比誘電率番号1,2,...が与えられます。 |
22 関数名 | ost_epsr_name |
機能 | 直前に入力した誘電率データに名前を付けます。オプションです。 |
宣言 | void ost_epsr_name(const char name[]); |
引数 |
name : 名前 |
備考 |
本関数はデータの管理に使用するものであり、計算結果に影響を与えません。 |
23 関数名 | ost_unit6 |
機能 | 物体形状を追加します。複数回呼び出し可。 |
宣言 | void ost_unit6(int type, int pid, int shape, double x1, double x2, double y1, double y2, double z1, double z2); |
引数 |
type : 電極と誘電体の種別、1=電極、2=誘電体 pid : 属性番号(1以上、電極のときは電圧番号、誘電体のときは比誘電率番号) shape : 形状番号(形状番号=31,32,33以外) x1,x2,y1,y2,z1,z2 : 座標値 |
備考 |
形状番号の意味と座標の並びについては4.3を参考にしてください。 |
24 関数名 | ost_unit |
機能 | 物体形状を追加します。座標を配列で指定します。複数回呼び出し可。 |
宣言 | void ost_unit(int type, int pid, int shape, const double p[]); |
引数 |
type : 電極と誘電体の種別、1=電極、2=誘電体 pid : 属性番号(1以上、電極のときは電圧番号、誘電体のときは比誘電率番号) shape : 形状番号 p : 座標値、三角柱(形状番号=31,32,33)は8個、それ以外は6個 |
備考 |
形状番号の意味と座標の並びについては4.3を参考にしてください。 |
25 関数名 | ost_unit_name |
機能 | 直前に入力した物体形状に名前を付けます。オプションです。 |
宣言 | void ost_unit_name(const char name[]); |
引数 |
name : 名前 |
備考 |
本関数はデータの管理に使用するものであり、計算結果に影響を与えません。 |
26 関数名 | ost_solver |
機能 | 反復計算条件を指定します。オプションです。 |
宣言 | void ost_solver(double omega, int maxiter, int nout, double convergence); |
引数 |
omega : 緩和係数ω maxiter : 最大反復回数 nout : 収束経過の出力間隔 convergence : 収束判定条件(通常1e-5) |
備考 |
本関数を呼び出さないときは適当な既定値が設定されますが、収束状況を見て適当に設定することが大切です。 |
27 関数名 | ost_plotiter |
機能 | 収束状況を図形出力します。オプションです。 |
宣言 | void ost_plotiter(int i); |
引数 |
i : 0/1=しない/する。既定値は1です。 |
28 関数名 | ost_plot1d |
機能 | 線上分布図を図形出力します。複数回呼び出し可。 |
宣言 | void ost_plot1d(const char component[], const char direction[], double p1, double p2); |
引数 |
component : 計算する成分("V", "E", "D", "Q"のいずれか) direction : 線の向き("X", "Y", "Z"のいずれか) p1, p2 : 線の座標、向きがXのときはY,Z座標、向きがYのときはZ,X座標、向きがZのときはX,Y座標 |
29 関数名 | ost_1ddb |
機能 | 線上分布図の単位を指定します。オプションです。 |
宣言 | void ost_1ddb(int i); |
引数 |
i : 0=線形、1=dB |
備考 |
本関数を呼び出さないときは単位は線形です。 |
30 関数名 | ost_1dscale |
機能 | 線上分布図のスケールを指定します。オプションです。 |
宣言 | void ost_1dscale(double min, double max, int div); |
引数 |
min : 最小値 max : 最大値 div : 分割数 |
備考 |
本関数を呼び出さないときはスケールは自動設定されます。 |
31 関数名 | ost_1dlog |
機能 | 線上分布を1d.logに数値出力するか。オプションです。 |
宣言 | void ost_1dlog(int i1); |
引数 |
i1 : 0=出力しない、1=出力する。 |
備考 |
本関数を呼び出さないときは数値出力します。 |
32 関数名 | ost_plot2d |
機能 | 面上分布図を図形出力します。複数回呼び出し可。 |
宣言 | void ost_plot2d(const char component[], const char direction[], double p); |
引数 |
component : 計算する成分("V", "E", "Ex", "Ey", "Ez", "D", "Dx", "Dy", "Dz", "Q"のいずれか) direction : 面の向き("X", "Y", "Z"のいずれか) p : 面の座標、向きがXのときはX座標、向きがYのときはY座標、向きがZのときはZ座標 |
33 関数名 | ost_2dfigure |
機能 | 面上分布図を2Dまたは3Dで出力するか。オプションです。 |
宣言 | void ost_2dfigure(int i1, int i2); |
引数 |
i1 : 0=2Dを出力しない、1=2Dを出力する。 i2 : 0=3Dを出力しない、1=3Dを出力する。 |
備考 |
本関数を呼び出さないときはすべて出力されます。 |
34 関数名 | ost_2ddb |
機能 | 面上分布図の単位を指定します。オプションです。 |
宣言 | void ost_2ddb(int i); |
引数 |
i : 0=線形、1=dB |
備考 |
本関数を呼び出さないときは単位は線形です。 |
35 関数名 | ost_2dscale |
機能 | 面上分布図のスケールを指定します。オプションです。 |
宣言 | void ost_2dscale(double min, double max); |
引数 |
min : 最小値 max : 最大値 |
備考 |
本関数を呼び出さないときはスケールは自動設定されます。 |
36 関数名 | ost_2dcontour |
機能 | 面上分布図の描画方法を指定します。オプションです。 |
宣言 | void ost_2dcontour(int i1); |
引数 |
i1 : 0=カラー精細、1=カラー簡易、2=モノクロ精細、3=モノクロ簡易 |
37 関数名 | ost_2dobject |
機能 | 面上分布図に物体を描くか。オプションです。 |
宣言 | void ost_2dobject(int i1, int i2); |
引数 |
i1 : 0=電極を描かない、1=電極を描く。 i2 : 0=誘電体を描かない、1=誘電体を描く。 |
備考 |
本関数を呼び出さないときはすべて出力されます。 |
38 関数名 | ost_2dzoom |
機能 | 面上分布図の一部を拡大表示します。オプションです。 |
宣言 | void ost_2dzoom(double x1, double x2, double y1, double y2); |
引数 |
x1 : 横方向下限 x2 : 横方向上限 y1 : 縦方向下限 y2 : 縦方向上限 |
備考 |
本関数を呼び出さないときは全領域が表示されます。 |
39 関数名 | ost_2dlog |
機能 | 面上分布を2d.logに数値出力するか。オプションです。 |
宣言 | void ost_2dlog(int i1); |
引数 |
i1 : 0=出力しない、1=出力する。 |
備考 |
本関数を呼び出さないときは数値出力します。 |
42 関数名 | ost_outdata |
機能 | 出力ファイル名を指定します。必須です。 |
宣言 | void ost_outdata(const char file[]); |
引数 |
file : 出力ファイル名。拡張子は".ost"推奨。 |
メッシュデータについての注意事項
メッシュデータはX方向、Y方向、Z方向から成り、それぞれ1個以上の区間から成ります。
それらを入力するには例えばX方向については、
ost_xsection1とost_xdivision1を組み合わせるか、
ost_xsectionとost_xdivisionを使用するかの2通りがあります。
これらはどちらか一方が有効です。
前者では区間の数だけost_xsection1とost_xdivision1を呼び出し、
最後にost_xsection1で終わります。
後者ではost_xsectionとost_xdivisionを一回呼び出します。
なお、後者では引数の数が可変になります。
可変個の引数に数値を直接代入するときは整数(int)であるか実数(double)であるかわかるように入力する必要があります。
整数は例えば"1"となります。
実数は例えば"1.0", "1e-3", "1.0e-3"となります。
物体形状の入力順
物体形状が重複する点では後から入力した物体の属性が優先されます。
従って誘電体に厚さのない電極を貼るときは先に誘電体を入力する必要があります。
逆にすると電極が消えます。
サンプルプログラム
リスト4-7-1にデータ作成ライブラリを使用したサンプルプログラムを示します。
/*
sample1.c
sample program of OpenSTF datalib
*/
#include "ost_datalib.h"
int main()
{
// (1) initialize
ost_init();
// (2) title
ost_title("sample1");
// (3) mesh
ost_xsection(2, -5.0, +5.0);
ost_xdivision(1, 50);
ost_ysection(2, -5.0, +5.0);
ost_ydivision(1, 50);
ost_zsection(2, -5.0, +5.0);
ost_zdivision(1, 50);
// (4) volt
ost_volt(-1);
ost_volt(+1);
// (5) dielectric
ost_epsr(2.0);
// (6) geometry
ost_unit6(2, 1, 1, -2.0, +2.0, -2.0, +2.0, -2.0, +2.0); // dielectric
ost_unit6(1, 1, 1, -2.0, +2.0, -2.0, +2.0, -2.0, -2.0); // -electrode
ost_unit6(1, 2, 1, -2.0, +2.0, -2.0, +2.0, +2.0, +2.0); // +electrode
// (7) solver
ost_solver(1.97, 3000, 100, 1e-5);
// (8) post
ost_plotiter();
ost_plot1d("E", "Z", 0, 0);
//ost_1ddb(1);
//ost_1dscale(-50, 10, 6);
ost_plot2d("E", "X", 0);
//ost_2dfigure(1, 1);
//ost_2ddb(1);
//ost_2dscale(-50, 10);
//ost_2dcontour(0);
//ost_2dobject(1, 1);
// (9) output
ost_outdata("sample1.ost");
return 0;
}
コンパイル・実行方法
データ作成ライブラリを使用したソースコードをコンパイル・実行する方法は以下の通りです。
Windows+VC++の場合
> cl.exe /O2 sample1.c ost_datalib.c > sample1.exeLinux+gccの場合
$ gcc -O sample1.c ost_datalib.c -o sample1 $ ./sample1以上でファイル(ここではsample1.ost)が出力されます。
OpenSTF 4 2 title = sample1 xmesh = -5 50 5 ymesh = -5 50 5 zmesh = -5 50 5 volt = -1 volt = 1 epsr = 2 geometry = 2 1 1 -2 2 -2 2 -2 2 geometry = 1 1 1 -2 2 -2 2 -2 -2 geometry = 1 2 1 -2 2 -2 2 2 2 solver = 1.97 3000 100 1e-05 plotiter = 1 plot1d = E Z 0 0 1ddb = 0 1dlog = 1 plot2d = E X 0 2dfigure = 1 1 2ddb = 0 2dcontour = 0 2dobject = 1 1 2dlog = 1 end