シミュレーションの演習のコード

GS20.BGSのコードを以下に示します。このコードは BGSP用です。第1行の

BOND SYMBOL EXPR OUT DEFIN PARM INIT

はコードの一部ですから省略してはいけません。また、BGSPではカラム指定が厳格で1カラムでもずれるとエラーになります。また、許される文字は英数字、コロン(:)、スラッシュ(/)、加減乗算記号(+-*)、半角空白のみであり、制御文字が入るとエラーになります。倍角の空白はエラーを生じますが、ソースをプリントしても気づきにくいので注意が必要です。

GS20のコード

BOND SYMBOL EXPR OUT DEFIN PARM INIT
SE11   11
OJ     -11   12    121
ZJ     -121  19    32    33
RE32   32
CI33   33
RE12   12
TF19   19    21
OJ     -21   24    22    23    234
II24   24
SE234  234
RE22   22
CI23   23
/
BC: P33   EF33
BC: Q12   FL12 
BC: PL    EF33
BC: PL2   EF12
BC: FL    FL32
OP: X231
RV: XXRR
      OP=XXRR
EOD
OP: X232
RV: XXR2
       OP=XXR2
EOD
/
SE11
PA: PSE1   1.000D+00
        E=PSE1
EOD
RE32
PA: PRE1   1.0000D+03
PA: PT01   5.0000D-01
      IF(T.LE.PT01)THEN
      R=Z*PRE1
      ELSE
      R=Z*PRE1*0.3
      ENDIF
EOD
CI33
PA: PCE1   2.0000D+02
       C=Z/PCE1
EOD
TF19
PA: PT1    3.14
       TF=1/PT1
EOD
II24
PA: PI1    3.0000D-05
       L=Z/PI1
EOD
RE22
PA: PRE2   5.0000D-03
       R=PRE2*Z
EOD
SE234
PA: PSE2   1.8800D+00
        E=PSE2
EOD
CI23
PA: PCE2   1.0000D+00
PA: POP1   -5.000D-01
PA: POP2   6.2800D+00
PA: POP3   0.0000D+00
PA: POP4   5.0000D-01
PA: POP5   -5.000D-01
PA: POP6   1.5700D-01
PA: POP7   1.2560D+01
PA: POP8   3.1400D-01
PA: POP9   1.2246D+01
PA: PO10   -5.9660D+00
RV: XXRR
        C=Z/PCE2
        ZZ=C
        XXRR=ZZ
        IF(ZZ.LE.POP5)THEN
         C=-POP2
        ELSEIF(ZZ.LE.POP3)THEN
        C=POP7*ZZ
        ELSEIF(ZZ.LE.POP4)THEN
        C=POP8*ZZ
        ELSEIF(ZZ.LE.1.0)THEN
        C=POP9*ZZ+PO10
        ELSE
        C=POP2
        ENDIF
EOD
RE12
PA: PRE5   8.000D+03
PA: PRX1   -0.5000D+00
PA: PRX2   0.50000D+00
PA: PRX3   0.00000D+00
PA: PRX4   1.00000D+00
RV: XXRR
RV: XXR2
        IF(XXRR.LE.PRX3)THEN
         XXR2=PRX2
        ELSEIF(XXRR.LE.PRX2)THEN
         XXR2=-XXRR+PRX2
         ELSE
         XXR2=PRX3
        ENDIF
        R=Z*PRE5*XXR2
EOD
/
0.0000            1.000D-00         1.000D-8          4000
/

20-Simによるシミュレーションのコード

Se11
parameters
	real effort = 1.0000;
variables
	real flow;
equations
	p.e = effort;
	flow = p.f;
Time
equations
	output = time;

R32
parameters
	real pre1=1.000e+03;
	real pt01=5.000e-01;
equations
	p.f =if output  <= pt01 then
		 pre1* p.e
		else
			p.e*pre1*0.3
			end;
CI33
parameters
	real pce1 = 2.000e+02;
equations
	state = int(p.f);
	p.e = state / pce1;
TF1921
parameters
	real  pt1= 3.14;
equations
	p1.e =  p2.e/pt1;
	p2.f =  p1.f/pt1;
R22
parameters
	real  pre22=5.000e-03;
equations
	p.e = pre22 * p.f;

I24
parameters
	real pi1=3.000e-05;
equations
    state = int(p.e);
    p.f = state / pi1;

Se234
parameters
	real pse2=-1.8800e+00;
equations
	p.e = pse2;

C23
parameters
	real pcp1=1.0000;
	real pcp2=6.2800e+00;
	real pcp3=0.000e+00;
	real pcp4=5.000e-01;
	real pcp5=-5.000e-01;
	real pcp6=1.5700e-01;
	real pcp7=1.2560e+01;
	real pcp8=3.1400e-01;
	real  pcp9=1.22460e+01;
	real pcp10=-5.9660e+00;
variables
	real zz;
equations
	state = int(p.f);
	zz=state/pcp1;
	port1=zz;
	p.e = if zz <= pcp5 then
		-pcp2
		else if zz <= pcp3 then
			pcp7*zz
			else if zz <=pcp4 then
				pcp8*zz
				else if zz <=pcp2 then
					pcp9*zz+pcp10
					else
						pcp2
						end
						end
						end
						end;
R12
parameters
	real pre5=8.000e+03;
	real prx2=0.5000e+00;
	real prx3=0.000e+00;
variables
	real zz;
equations
	zz=if port1 <= prx3 then
		prx2
		else if port1 <= prx2 then
			-port1+prx2
			else
				prx3
				end
				end;
				p.f=p.e*pre5*zz;