OpenCAE Hobby Lab
OpenCAE Hobby Lab

前ステップの値を使用した計算を実施する方法

計算している状態変数の前のステップからの差分を取りたい場合、pre関数が使えるがこれはder(x)など離散的な変数にのみ使える。

一例を示す。

model countup
  Real counter(start=0);
  Boolean flag;
  Real timeDiff;
  Real checkTime=0.1;
  Real eps=0.001;
equation
  timeDiff = time - checkTime*floor(time/checkTime);
  flag = timeDiff < eps;
  when flag then
    counter = pre(counter) + 1;
  end when;
end countup;

ここではcheckTime(0.1)ごとにcounter変数を増加させるコードを書いている。

この場合は今の時間がcheckTimeを通過したかどうかをepsで幅を持たせて判定している。

image

式の評価自体を0.1秒毎に行うにはsampleが使える。

model countup
  Real counter(start=0);
  Real checkTime=0.1;
equation
    when sample(checkTime, checkTime) then
      counter = pre(counter) + 1;
    end when;
end countup;
image

この時どちらの例もwhenで定義している条件式は離散的であり連続的でないものとなっている。

hammamania.tech