シミュレーションの演習のコード
GS18.BGSのコードを以下に示します。このコードは BGSP用です。第1行の
BOND SYMBOL EXPR OUT DEFIN PARM INIT
はコードの一部ですから省略してはいけません。また、BGSPではカラム指定が厳格で1カラムでもずれるとエラーになります。また、許される文字は英数字、コロン(:)、スラッシュ(/)、加減乗算記号(+-*)、半角空白のみであり、制御文字が入るとエラーになります。倍角の空白はエラーを生じますが、ソースをプリントしても気づきにくいので注意が必要です。
GS18のコード
BOND SYMBOL EXPR OUT DEFIN PARM INIT
SF1 11
ZJ -11 12 -14 13
OJ -12 35 42
OJ -41 15 14
SE2 42
RE1 35
CI1 13
SE1 41
ZJ -15 25 27
TF1 27 26
OJ -26 23 24 22
II1 24
RE4 22
RE3 25
CI2 23
/
BC: Q11 FL11
BC: P13 EF13
BC: X231 DP23
BC: P35 EF35
BC: F35 FL35
BC: E231 EF23
BC: F15 FL15
BC: F25 FL25
BC: F27 FL27
BC: E25 EF25
OP: X231
PA: P10 1.000D+03
FB: X231 DP23
OP=X231*P10
EOD
/
SF1
PA: PSF1 5.000D+01
PA: PSIN 3.1416D+00
PA: P200 2.0000D+00
PA: PPEAK -1.170D+01
F=PPEAK*DSIN(P200*PSIN*PSF1*T)
EOD
SE1
PA: PSIN2 0.0000D+00
E=PSIN2
EOD
SE2
PA: PSE1 2.0000D-01
E=PSE1
EOD
RE1
PA: PR1 -1.0000D+00
PA: PR2 0.00000D+00
PA: PR3 1.0000D+00
PA: PR4 3.8000D+02
R=Z/PR3
IF(R.LE.PR2)THEN
R=PR2
ELSE
R=Z*PR4
ENDIF
EOD
CI1
PA: PC1 1.10000D-02
PA: PC2 1.59350D-01
C=Z/PC1+PC2
EOD
RE4
PA: PR6 4.0000D-02
R=Z*PR6
EOD
RE3
PA: PCCZ 9.500D+05
RV: XXRR
IF(XXRR.GE.0.0)THEN
R=Z*PCCZ*XXRR
ELSE
R=0.0
ENDIF
EOD
TF1
PA: PATF 2.5400D+00
TF=1/PATF
EOD
II1
PA: PI1 3.6000D-05
PA: PI2 1.755551D-02
L=Z/PI1+PI2
EOD
CI2
PA: PC3 1.0000D+00
PA: PC4 -1.620D-05
PA: PC5 -4.000D-04
PA: PC6 -1.0000D+01
PA: PC7 0.0000D+00
PA: PC8 4.0000D-04
PA: PC9 8.0000D-04
PA: PCF1 2.5000D+04
PA: PCF2 2.5000D+01
PA: PCF4 2.49750D+04
PA: PCF5 -9.9800D+00
RV: XXRR
C=Z/PC3+PC4
ZZ=C
XXRR=ZZ
IF(ZZ.LE.PC5)THEN
C=PC6
ELSEIF(ZZ.LE.PC7)THEN
C=PCF1*ZZ
ELSEIF(ZZ.LE.PC8)THEN
C=PCF2*ZZ
ELSEIF(ZZ.LE.PC9)THEN
C=PCF4*ZZ+PCF5
ELSE
C=1.000D+01
ENDIF
EOD
/
0.0000 2.000D-02 1.000D-9 4000
/
20-Simによるシミュレーションのコード
Sine
parameters
real amplitude = -1.170e+01; // amplitude of the wave
real omega = 5.0e0 {rad/s}; // angular frequency of the wave
real pi=3.141593;
variables
boolean hidden change;
real hidden half;
equations
"calculate at least 2 points per cycle to get a triangle"
half = pi / omega;
change = frequencyevent (half, half / 2);
"calculate the sine wave"
output = amplitude * sin ( 2*omega *pi* time);
MSf11
variables
real effort;
equations
p.f = flow;
effort = p.e;
Se41
parameters
real effort = 0.0000;
variables
real flow;
equations
p.e = effort;
flow = p.f;
C13
parameters
real pc1 = 1.1000e-02;//CI1
real pc2=1.59350e-01;
equations
state = int(p.f);
p.e = state / pc1+pc2;
R351
parameters
real pr1= -1.0;//R351
real pr2=0.000;
real pr3=1.000;
real pr4=3.8000e+02;
variables
real zz;
equations
zz= p.e/pr3;
p.f=if zz <= pr2 then
pr2
else
p.e*pr4
end;
Se12
parameters
real effort =- 2.000e-01;
variables
real flow;
equations
p.e = effort;
flow = p.f;
R151
parameters
real pccz = 9.500e+05;//RE3
real pczero=0.0000;
equations
p.f= if port1 >= pczero then
port1* pccz * p.e
else
pczero
end;
TF2726
parameters
real r = 2.5400;
equations
p1.e = p2.e/r;
p2.f = p1.f/r;
R22
parameters
real r = 4.0e-02;//RE4
equations
p.e = r * p.f;
I24
parameters
real pi1 = 3.6000e-05;
real pi2=1.75555e-02;
equations
state = int(p.e);
p.f = state / pi1+pi2;
C231
parameters
real pc3 = 1.000;//CI2
real pc4=-1.620e-05;
real pc5=-4.000e-04;
real pc6=-1.000e+01;
real pc7=0.000;
real pc8=4.000e-04;
real pc9=8.000e-04;
real pcf1=2.500e+04;
real pcf2=2.500e+01;
real pcf4=2.49750e+04;
real pcf5=-9.980e+00;
variables
real zz;
equations
state = int(p.f);
zz=state/pc3+pc4;//efort
port1=zz;
p.e=if zz <=pc5 then
pc6
else if zz <= pc7 then
pcf1*zz
else if zz <= pc8 then
pcf2*zz
else if zz <= pc9 then
pcf4*zz+pcf5
else
1.000e+01
end
end
end
end;
