DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦ce4d9eeba⟧ TextFile

    Length: 8448 (0x2100)
    Types: TextFile
    Names: »chdemotx«

Derivation

└─⟦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« 

TextFile

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◀