|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 8448 (0x2100) Types: TextFile Names: »chdemotx«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦this⟧ »chdemotx« └─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦this⟧ »chdemotx«
clear temp chem chem=set 200 chem=algol program for demonstration of chemical kinetics fp: nmol.20 npl.30 bplot.true test1.false test2.false plotter.(tek4006b) 17 02 82 18 00 00 begin integer ntext,nmol,npl,ns,s; boolean bplot,test1,test2; real array PLOTTER(1:2); readifp(<:ntext:>,ntext,100); readifp(<:nmol:>,nmol,20); readifp(<:npl:>,npl,30); readbfp(<:bplot:>,bplot,true); readbfp(<:test1:>,test1,false); readbfp(<:test2:>,test2,false); readsfp(<:plotter:>,PLOTTER,<:tek4006b:>); s:= 1; setplotname(string PLOTTER(increase(s)),0); begin integer mi,mn,ri,rn,vki,n,r; integer array V,K(1:ntext),MOL,REA(1:nmol); procedure writevkmr; begin integer i; write(out,<:<10> V , K:>); for i:= 1 step 1 until vki do write(out,<:<10>:>,<< ddddddd>,V(i),<< d>,K(i)); write(out,<:<10>MOL:>); for i:= 1 step 1 until mn do write(out,<< d>,MOL(i)); write(out,<:<10>REA:>); for i:= 1 step 1 until rn do write(out,<< d>,REA(i)); end; procedure syntaxerror; begin write(out,<:<10>syntax error:>); if test1 then write(out, <:<10>vki = :>,vki,<: mn = :>,mn,<: rn = :>,rn); if test1 then writevkmr; alarm(<:<10>error:>,0); end; integer procedure searchmol(a); integer a; begin integer i,mi; boolean found,comp; found:= false; searchmol:= 0; mi:= 0; for mi:= mi+1 while MOL(mi)>0 and -,found do begin comp:= true; for i:= 0,i+1 while K(a+i)=6 and K(MOL(mi)+i)=6 do if V(a+i)<>V(MOL(mi)+i) then comp:= false; if comp then begin found:= true; searchmol:= mi end; end end; begin integer i; integer array alfabet(0:255); for i:= 0 step 1 until 9, 11 step 1 until 24, 26 step 1 until 42, 44, 46, 47, 58, 59, 60, 61, 63, 64, 94, 95, 96, 126 step 1 until 255 do alfabet(i):= i; for i:= 48 step 1 until 57 do alfabet(i):= 2 shift 12+i; for i:= 65 step 1 until 93, 97 step 1 until 125 do alfabet(i):= 6 shift 12 + i; for i:= 10, 43, 45, 62 do alfabet(i):= 7 shift 12 + i; alfabet(25):= 8 shift 12 + 25; intable(alfabet); write(out,<:reactions<10>:>); outendcur(0); i:= readall(in,V,K,1); if i<0 then alarm(<:textbuf size:>,i); intable(0); end; mn:= rn:= 1; vki:= 1; cleararray(MOL); cleararray(REA); REA(1):= 1; if -,(V(1)=10 or K(1)=2 or K(1)=6 or V(1)=45) then syntaxerror; for vki:= vki while -,K(vki)=8 do if K(vki)=2 and K(vki+1)=6 then vki:= vki+1 else if K(vki)=6 then begin if searchmol(vki)=0 then begin MOL(mn):= vki; mn:= mn+1 end; for vki:= vki+1 while K(vki)=6 do; if V(vki)=62 and K(vki)<>7 and K(vki)<>8 then syntaxerror; end else if V(vki)=10 and V(vki+1)=10 then vki:= vki+1 else if V(vki)=10 and (K(vki+1)=2 or K(vki+1)=6 or K(vki+1)=8 or V(vki+1)=45) then begin vki:= vki+1; REA(rn):= vki end else if V(vki)=43 and (K(vki+1)=2 or K(vki+1)=6) then vki:= vki+1 else if V(vki)=45 and V(vki+1)=62 and (K(vki+2)=2 or K(vki+2)=6 or V(vki+2)=10 or K(vki+2)=8) then begin rn:= rn+1; vki:= vki+2; REA(rn):= vki end else syntaxerror; n:= mn:= mn-1; r:= rn:= rn-1; begin integer i,rho,ny,ni,nm,jpl,mfac; real t,tm,xm,g,h,dt,eps; boolean test,bfinal,reactants,bb; integer array N,R(1:n,1:r); real array G,E,F(1:r),C(1:n),PLT(0:npl),X(1:n),PLX(1:n,0:npl); real array field f; procedure operator; begin if opkey then begin outpl; bfinal:= readb(<:stop:>); if -,bfinal then test:=readb(<:test:>); end end; procedure outpl; begin integer i,j; if bplot then begin for i:= 1 step 1 until n do begin plotmove(PLT(0),PLX(i,0)); pendown; for j:= 1 step 1 until jpl-1 do plotmove(PLT(j),PLX(i,j)); penup; end; plotend; PLT(0):= PLT(npl); for i:= 1 step 1 until n do PLX(i,0):= PLX(i,npl); end bplot; jpl:= 1; end; procedure writex; begin integer i; write(out,<:<10>:>,<<dd.d00'-d>,t,<: :>); for i:= 1 step 1 until n do write(out,<< dd.d00'-d>,X(i)); outendcur(0); if opkey then test:= false; end; procedure writern; begin write(out,<:<10><10>R:>); for mi:= 1 step 1 until mn do begin write(out,<:<10>:>); for ri:= 1 step 1 until rn do write(out,<< d>,R(mi,ri)) end; write(out,<:<10><10>N:>); for mi:= 1 step 1 until mn do begin write(out,<:<10>:>); for ri:= 1 step 1 until rn do write(out,<< d>,N(mi,ri)) end; end; procedure plotnew; begin tm:= readr(<:maximal time:>); if bplot then begin xm:= readr(<:maximal concentration:>); plotform(0,15,10); scalexcoor(0,tm,2,15-0.5); scaleycoor(0,xm,1,10-2.5); plotframe(0.0,0.0); plotend; end bplot; end; procedure parameters; begin dt:= readr(<:time interval:>); eps:= readr(<:epsilon:>); end; procedure concentrations; begin write(out,<:<10>start concentrations<10><10>:>); for mi:= 1 step 1 until mn do begin f:= 2*MOL(mi)-2; mfac:= 1; write(out,string V.f(increase(mfac)),<: = :>); outendcur(0); read(in,C(mi)); end; end; procedure rates; begin write(out,<:<10>reaction rates<10><10>:>); for ri:= 1 step 1 until rn do begin write(out,<<dd>,ri,<:: :>); outendcur(0); read(in,F(ri)); end; end; procedure v(t,X,Y); real t; real array X,Y; begin for rho:= 1 step 1 until r do begin G(rho):= F(rho); for ny:= 1 step 1 until n do if R(ny,rho)=0 then else if R(ny,rho)=1 then G(rho):= G(rho)*X(ny) else if R(ny,rho)=2 then G(rho):= G(rho)*X(ny)*X(ny) else G(rho):= G(rho)*X(ny)**R(ny,rho); end; for ny:= 1 step 1 until n do begin Y(ny):= 0; for rho:= 1 step 1 until r do Y(ny):= Y(ny)+N(ny,rho)*G(rho) end; end; cleararray(N); cleararray(R); for ri:= 1 step 1 until rn do begin vki:= REA(ri); mfac:= 1; reactants:= true; for vki:= vki while -,(K(vki)=8 or V(vki)=10 or(V(vki)=45 and -,reactants)) do if K(vki)=2 then begin mfac:= V(vki); vki:= vki+1 end else if K(vki)=6 then begin mi:= searchmol(vki); if reactants then R(mi,ri):= R(mi,ri)+mfac else N(mi,ri):= N(mi,ri)+mfac; mfac:= 1; for vki:= vki+1 while K(vki)=6 do; end else if V(vki)=43 then vki:= vki+1 else if V(vki)=45 then begin reactants:= false; vki:= vki+2 end else begin write(out,<:<10>programerror:>); writern; alarm(<:<10>error:>,0); end; end; if test1 then begin writevkmr; writern end; for mi:= 1 step 1 until mn do for ri:= 1 step 1 until rn do N(mi,ri):= N(mi,ri)-R(mi,ri); bfinal:= false; if bplot then test:= false else test:= true; if test2 then writern; rates; concentrations; parameters; plotnew; l:for ny:= 1 step 1 until n do X(ny):= C(ny); PLT(0):= t:= 0; jpl:= 1; for ny:= 1 step 1 until n do PLX(ny,0):= X(ny); for t:= t while t<tm and -,bfinal do begin PLT(jpl):= t; for ny:= 1 step 1 until n do PLX(ny,jpl):= X(ny); jpl:= jpl+1; if jpl>npl then outpl; if test then writex; rkfifth(v,t,X,t+dt,eps,n,bb); end; PLT(jpl):= t; for ny:= 1 step 1 until n do PLX(ny,jpl):= X(ny); jpl:= jpl+1; outpl; if -,readb(<:end:>) then begin if readb(<:new start concentrations:>) then concentrations; if readb(<:new reaction rates:>) then rates; if readb(<:new parameters:>) then parameters; if readb(<:new plot:>) and bplot then plotnew; bfinal:= false; goto l; end; lend:outpl; if bplot then plotclose; end; end; end ▶EOF◀