入力ファイルの中でスカラー関数(scalar function)を定義して使用することができます。ここで言うスカラー関数とは、 y = f (x) のように一つの実数入力(x)に対して一つの実数出力(y)が対応する関数のことです。スカラー関数を上手く使えば、モデル作成の幅が広がります。
スカラー関数は、“scalar function”カードを用いて定義します。scalar functionカードによるスカラー関数の定義は、その関数が使われる前であれば、入力ファイル中のどこでも(ブロック外でも)記述できます。以下に、“multilinear”と“cubicspline”の手法によってスカラー関数“myfunc1”と“myfunc2”を定義した例をそれぞれ示します。
scalar function: "myfunc1", multilinear, do not extrapolate, -2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 2.0, 1.0, 3.0, 1.0;
scalar function: "myfunc2", cubicspline, do not extrapolate, -2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 2.0, 1.0, 3.0, 1.0;
図1および図2のように、定義したスカラー関数を可視化する方法については次項で説明します。
定義したスカラー関数は、入力ファイルの中で自由に使用することができます。特定の入力値に対するスカラー関数の評価値は次のように記述することで得られます。
model::sf:: <scalar function name> ( <x> )
例えば、変数を定義する際に、
set: real A = model::sf::myfunc1(0.5);
または、String Driveを定義する際に、
string, "5.e-2*model::sf::myfunc1(Time)";
などのように使用することができます。ちなみに、“Time”はMBDynであらかじめ定義されている変数で、進行中のシミュレーション時刻を値として持ちます。