|
|
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: 18432 (0x4800)
Types: TextFile
Names: »alglavib«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦7e928b248⟧ »algbib«
└─⟦this⟧
;gosav time 100
lookup bmatrix
if ok.no
(i extbmatrix)
lavib=set 130
permanent lavib.15
lavib=algol index.no
\f
lavib
Large-Amplitude-Vib-program 17-9-1974. GOS.
begin
comment The input rules are:
1) Two textstrings in < >. The second specifies input area
for definitions of internal vib-coordinates.
2) The number of atoms in the molecule (N).
3) The number of free internal coordinates in constrained
model (NF). NF = 0, if no constraints.
4) The number of symmetry species BL, and for each of
these the number of internal vib-coordinates.
5) The indices of the free internal coordinates, according
to their order of definition.
6) For each atom: Up to three coordinates (last del.: nl)
7) 3N-6 internal coordinates defined by the following
types of constructions:
p dist: real i1 j1 i2 j2 . . ip jp
p angle: real i1 j1 k1 . . . ip jp kp
p outo: real i1 j1 k1 l1 . . ip jp kp lp
or p tors: real i1 j1 k1 l1 . . ip jp kp lp
indicating the desired bondlengths and angles, and
p sum: i1 j1 . . . ip jp
indicating sums (or differences, if the signs of i and
j differ) of previously specified internal coordinates.
These coordinates themselves are omitted in determining
the cartesian coordinates. Terminate by p = 0. NB: An angle
= 180 deg. counts for two internal coordinates. If no in-
ternal coordinates are specified at all, inertial moments
are calculated from the originally given cartesian coor-
dinates (see 3. above).
8) N atomic masses. mass(i) = -1 means mass(i):= mass(i-1).
9) The calculation may be repeated several times after
changing one or more internal coordinates by specifying
the number of simultaneous changes, p, and for each of
these, the number of the particular internal coordinate
as appearing in the original specification list (see 7)
and the new value. The calculations are stopped by p = 0.
If a negativ p is specified, the Eckart conditions are
applied in calculating cartesian coordinates for the dis-
torted structure. Otherwise the inertial tensor is diago-
nalized (PAS-system);
integer i,j,k,l,m,n,ns,N,N3,NF,BL,cycl,bout,m0;
boolean nl, sp, closeres, eckart;
array head(1:12), binp(1:1), IP(1:3);
zone res(128,1,stderror);
closeres:= outmedium(res); bout:= -1;
nl:= false add 10; sp:= false add 32;
readhead(in,head,1); readhead(in,binp,1);
read(in,N,NF,BL); N3:= abs N*3; eckart:= false;
i:= 1; write(res,<:<12>:>,nl,4,string head(increase(i)),nl,2);
begin
integer array S(1:BL,1:2),CF(1:NF);
array X, Xp(1:N3), mass(1:abs N);
for i:=1 step 1 until BL do read(in,S(i,1));
read(in,CF);
for i:=1 step 1 until NF do CF(i):= 3+CF(i);
begin
integer Ni,Nj,Nk,Nl,p,q;
real type,rad,r,v,s1,s2;
integer array t(1:N3+N3,1:5);
array H(1:1), g(1:N3+N3);
real procedure vector(e,Ni,Nj);
value Ni,Nj; integer Ni,Nj; array e;
begin
real l,r; integer k;
r:= 0;
for k:=1 step 1 until 3 do begin
e(k):= l:= X(Nj+k)-X(Ni+k); r:= r+ l*l end;
r:= vector:= sqrt(r); r:= 1/r;
for k:= 1 step 1 until 3 do e(k):= e(k)*r
end vector;
real procedure dot(a,b);
array a,b;
begin real d; integer k;
d:= 0; for k:=1 step 1 until 3 do d:= d+ a(k)*b(k);
dot:= d
end dot;
real procedure cross(a,b,c);
array a,b,c;
begin real r; integer k;
c(1):= a(2)*b(3) - a(3)*b(2);
c(2):= a(3)*b(1) - a(1)*b(3);
c(3):= a(1)*b(2) - a(2)*b(1);
r:= 0; for k:=1 step 1 until 3 do r:= r+ c(k)**2;
cross:= r
end cross;
rad:= pi/180; Ni:= -3; k:= 0;
for i:=1 step 1 until N do begin
Ni:= Ni+3;
for j:=1,j+1 while k<>10 and j<=3 do begin
read(in,X(Ni+j)); repeatchar(in); readchar(in,k) end;
for j:=j step 1 until 3 do X(Ni+j):= 0;
end i;
if N<0 then begin
N:= -N; if readstruct(res,X,N) then goto stop
end;
n:= 0; read(in,p);
if p=0 then begin
if atomic(mass,N) then goto stop;
goto diag
end;
newtype:
readstring(in,H,1); type:= H(1);
if type = real <:dist:> then begin
read(in,r);
for m:=1 step 1 until p do begin
read(in,i,j); n:= n+1; g(n):= r;
t(n,1):= 1; t(n,2):= i; t(n,3):= j; t(n,4):= t(n,5):= 0;
write(res,nl,1,<:distance :>,<<dd>,i);
if j>9 then write(res,<<-dd>,-j) else
write(res,<<-d>,-j,sp,1);
write(res,<: = :>,<<dd.ddddd>,r)
end; type:= 0
end;
if type = real <:angle:> then begin
read(in,v);
for m:=1 step 1 until p do begin
read(in,i,j,k); n:= n+1; g(n):= v*rad;
t(n,1):= 2; t(n,2):= i; t(n,3):= j; t(n,4):= k; t(n,5):= 0;
write(res,nl,1,<:angle :>,<<dd>,i); q:= 0;
if j>9 then write(res,<<-dd>,-j) else
begin write(res,<<-d>,-j); q:= q+1 end;
if k>9 then write(res,<<-dd>,-k) else
begin write(res,<<-d>,-k); q:= q+1 end;
write(res,sp,q,<: = :>,<<-ddd.dd>,v,<: degrees.:>)
end; type:= 0
end;
if type = real <:outo:> then begin
read(in,v);
for m:=1 step 1 until p do begin
read(in,i,j,k,l); n:= n+1; g(n):= v*rad;
t(n,1):= 3; t(n,2):= i; t(n,3):= j; t(n,4):= k; t(n,5):= l;
write(res,nl,1,<:outo :>,<<dd>,i); q:= 0;
if j>9 then write(res,<<-dd>,-j) else
begin write(res,<<-d>,-j); q:= q+1 end;
if k>9 then write(res,<<-dd>,-k) else
begin write(res,<<-d>,-k); q:= q+1 end;
if l>9 then write(res,<<-dd>,-l) else
begin write(res,<<-d>,-l); q:= q+1 end;
write(res,sp,q,<: = :>,<<-ddd.dd>,v,<: degrees.:>)
end; type:= 0
end;
if type = real <:tors:> then begin
read(in,v);
for m:=1 step 1 until p do begin
read(in,i,j,k,l); n:= n+1; g(n):= v*rad;
t(n,1):= 4; t(n,2):= i; t(n,3):= j; t(n,4):= k; t(n,5):= l;
write(res,nl,1,<:tors :>,<<dd>,i); q:= 0;
if j>9 then write(res,<<-dd>,-j) else
begin write(res,<<-d>,-j); q:= q+1 end;
if k>9 then write(res,<<-dd>,-k) else
begin write(res,<<-d>,-k); q:= q+1 end;
if l>9 then write(res,<<-dd>,-l) else
begin write(res,<<-d>,-l); q:= q+1 end;
write(res,sp,q,<: = :>,<<-ddd.dd>,v,<: degrees.:>)
end; type:= 0
end;
if type = real <:sum:> then begin
for m:=1 step 1 until p do begin
read(in,i,j); n:= n+1;
if abs i > abs j then begin k:= i; i:= j; j:= k end;
t(n,1):= 5; t(n,2):= i; t(n,3):= j;
write(res,nl,1,<:sum of : :>,<<d>,i,<: and :>,j)
end; type:= 0
end;
comment additional types can be included here;
if type<>0 then begin
write(res,nl,2,string type,<: : Type undefined.:>);
goto stop
end;
read(in,p); if p<>0 then goto newtype;
if atomic(mass,N) then goto stop;
s1:= 100; cycl:= 0;
rep:
begin
array aa(1:N3,1:N3), bb(1:N3);
cycl:= cycl+1; m:= 0; s2:= s1; s1:= 0;
for i:=1 step 1 until N3 do
for j:=1 step 1 until N3 do aa(i,j):= 0;
for p:=1 step 1 until n do begin m:= m+1;
i:= t(p,2); j:= t(p,3); k:= t(p,4); l:= t(p,5);
Ni:= (i-1)*3; Nj:= (j-1)*3; Nk:= (k-1)*3; Nl:= (l-1)*3;
if t(p,1) = 1 then begin
array e(1:3);
r:= vector(e,Ni,Nj); bb(m):= g(p)-r;
for q:=1 step 1 until 3 do begin
aa(m,Ni+q):= -e(q); aa(m,Nj+q):= e(q) end
end else
if t(p,1) = 2 then begin
real cos,ri,rk,a,b;
array ei,ek,c(1:3);
ri:= 1/vector(ei,Nj,Ni); rk:= 1/vector(ek,Nj,Nk);
cos:= dot(ei,ek);
if cos+1>'-9 then begin
v:= pi/2 - arcsin(cos);
bb(m):= g(p)-v; v:= 1/sqrt(1-cos*cos);
for q:=1 step 1 until 3 do begin
aa(m,Ni+q):= a:= (ei(q)*cos- ek(q))*ri*v;
aa(m,Nk+q):= b:= (ek(q)*cos- ei(q))*rk*v;
aa(m,Nj+q):= -a-b end;
if g(p)=180*rad then v:= cross(ei,ek,c)
end else begin
if g(p)<>180*rad then begin
write(res,<:<10>***startvalue 180 of angle :>,
<<-d>,i,-j,-k,<:not allowed.:>); goto stop end;
v:= 0; for q:=1 step 1 until 3 do begin
a:= c(q):= ei(q)+ek(q); v:= v+a*a end;
bb(m):= -v;
if v<'-4 then begin
for q:= 3,q-1 while v<'-4 and q>=1 do
begin ek(q):= ek(q)+1; v:= cross(ei,ek,c) end end;
for q:=1 step 1 until 3 do begin
aa(m,Ni+q):= a:= c(q)*ri;
aa(m,Nk+q):= b:= c(q)*rk;
aa(m,Nj+q):= -a-b;
ei(q):= ei(q)-ek(q); ek(q):= c(q) end;
v:= cross(ei,ek,c)
end;
if g(p)=180*rad then begin
m:= m+1; bb(m):= 0;
for q:=1 step 1 until 3 do begin
c(q):= c(q)/v;
aa(m,Ni+q):= a:= c(q)*ri;
aa(m,Nk+q):= b:= c(q)*rk;
aa(m,Nj+q):= -a-b end
end end else
if t(p,1) = 3 then begin
real ri,rj,rl,sin,csc,cot,a,b,c;
array ei,ej,el,cij,cjl,cli(1:3);
ri:= 1/vector(ei,Nk,Ni);
rj:= 1/vector(ej,Nk,Nj);
rl:= 1/vector(el,Nk,Nl);
csc:= 1/sqrt(cross(ei,ej,cij));
cross(ej,el,cjl); cross(el,ei,cli);
cot:= dot(ei,ej)*csc; sin:= dot(cij,el)*csc;
a:= 1/sqrt(1-sin*sin); bb(m):= g(p)-arctan(a*sin);
ri:= ri*a*csc; rj:= rj*a*csc; rl:= rl*a;
for q:=1 step 1 until 3 do begin
aa(m,Ni+q):= a:= (cjl(q)-(ei(q)*csc-ej(q)*cot)*sin)*ri;
aa(m,Nj+q):= b:= (cli(q)-(ej(q)*csc-ei(q)*cot)*sin)*rj;
aa(m,Nl+q):= c:= (cij(q)*csc-el(q)*sin)*rl;
aa(m,Nk+q):= -a-b-c end
end else
if t(p,1) = 4 then begin
real ri,rl,cscj,csck,cosj,cosk;
array ei,el,ejk,cj,ck(1:3);
ri:= 1/vector(ei,Nj,Ni);
rl:= 1/vector(el,Nk,Nl);
r:= 1/vector(ejk,Nj,Nk);
cscj:= 1/cross(ei,ejk,cj); csck:= 1/cross(ejk,el,ck);
cosj:= dot(ei,ejk)*r*cscj; cosk:= -dot(el,ejk)*r*csck;
cscj:= cscj*ri; csck:= csck*rl;
v:= g(p) -
arg(-dot(cj,ck),sqrt(cross(ck,cj,ei))*sign(dot(ei,ejk)));
if abs v > pi then v:= v+(if v>0 then -pi*2 else pi*2);
bb(m):= v;
for q:=1 step 1 until 3 do begin
aa(m,Ni+q):= r:= cj(q)*cscj;
aa(m,Nj+q):= -r+cj(q)*cosj-ck(q)*cosk;
aa(m,Nl+q):= r:= ck(q)*csck;
aa(m,Nk+q):= -r+ck(q)*cosk-cj(q)*cosj end
end else
if t(p,1) = 5 then begin integer si, sj;
si:= sign(i); sj:= sign(j); i:= abs i; j:= abs j;
for q:=1 step 1 until N3 do aa(m,q):= si*aa(i,q)+sj*aa(j,q);
bb(m):= si*bb(i)+sj*bb(j); l:= 1;
for k:=i+1 step 1 until m do begin
if k=j then begin k:= k+1; l:= 2 end;
for q:=1 step 1 until N3 do aa(k-l,q):= aa(k,q);
bb(k-l):= bb(k)
end;
for k:=m-1,m do begin
bb(k):= 0; for q:=1 step 1 until N3 do aa(k,q):= 0
end; m:= m-2
end end p;
if m<N3-6 then begin
write(res,<:<10>***insufficient number of struc. param.:>);
goto stop
end;
if eckart then begin
Nj:= -3;
for j:=1 step 1 until N do begin
r:= mass(j); Nj:= Nj+3;
for i:=1,2,3 do aa(N3-i+1,Nj+i):= r;
aa(N3-5,Nj+1):= aa(N3-4,Nj+3):= -Xp(Nj+2)*r;
aa(N3-4,Nj+2):= aa(N3-3,Nj+1):= Xp(Nj+3)*r;
aa(N3-5,Nj+2):= Xp(Nj+1)*r; aa(N3-3,Nj+3):= -Xp(Nj+1)*r
end eckart betingelser;
for m:=N3-5 step 1 until N3 do
bb(m):= -sum(aa(m,j)*X(j),j,1,N3)
end else
begin array e2, ek, c(1:3);
vector(e2,0,3);
for Nk:=6,Nk+3 while cross(e2,ek,c)<'-4 do vector(ek,3,Nk);
Nk:= Nk-3; cross(e2,c,ek);
for i:=1,2,3 do begin
aa(N3-6+i,i):= 1;
aa(N3-2,i):= -ek(i); aa(N3-2,3+i):= ek(i);
aa(N3-1,i):= aa(N3,3+i):= -c(i);
aa(N3-1,3+i):= aa(N3,Nk+i):= c(i)
end;
for i:=N3-5 step 1 until N3 do bb(i):= 0
end;
begin integer array p(1:N3);
decompose(aa,p,0); solve(aa,p,0,bb);
for i:=1 step 1 until N3 do begin
r:= bb(i); s1:= s1 + r*r;
X(i):= X(i) + r end
end p;
if s1>N3*'-20 and s1<s2 then goto rep
end aa;
write(res,nl,2,<:cycles: :>,<<ddd>,cycl);
diag: begin
real Ia,Ib,Ic;
array It, my(1:3,1:3);
Ib:= 1/sum(mass(i),i,1,N);
for j:=1 step 1 until 3 do begin
Ia:= sum(X(3*i-3+j)*mass(i),i,1,N)*Ib;
for i:=j step 3 until N3 do X(i):= X(i)-Ia
end j, center_of_mass_corr.;
Ia:= sum(mass(i)*X(3*i-2)**2,i,1,N);
Ib:= sum(mass(i)*X(3*i-1)**2,i,1,N);
Ic:= sum(mass(i)*X(3*i )**2,i,1,N);
It(1,1):= Ib+Ic; It(2,2):= Ia+Ic; It(3,3):= Ia+Ib;
It(2,1):= -sum(mass(i)*X(3*i-2)*X(3*i-1),i,1,N);
It(3,2):= -sum(mass(i)*X(3*i-1)*X(3*i ),i,1,N);
It(3,1):= -sum(mass(i)*X(3*i )*X(3*i-2),i,1,N);
if -,eckart then begin
m0:= 0;
for i:=1 step 1 until N do
if mass(i)=0 then m0:= m0+1;
for i:=2,3 do for j:=i-1 step -1 until 1 do
if abs It(i,j)<'-8 then It(i,j):= 0;
tridql(3,IP,It);
for Ni:=N3-3 step -3 until 0 do begin
for j:=1,2,3 do Xp(Ni+j):= sum(It(j,k)*X(Ni+k),k,1,3);
for j:=1,2,3 do X(Ni+j):= Xp(Ni+j) end;
for i:=1,2,3 do It(i,i):= IP(i);
end -,eckart;
Ia:= It(1,1); Ib:= It(2,2); Ic:= It(3,3);
v:= 505376;
write(res,nl,2,
<:Moments of Inertia ::>,<< ddd.ddddddd>,Ia,Ib,Ic);
if eckart then
write(res,nl,1,sp,23,<< -dd.ddddddd>,It(2,1),It(3,2),It(3,1));
write(res,nl,1,<:Inertial Defect ::>,<< -dd.ddddddd>,
Ic-Ia-Ib,nl,1,<:Rotational Constants ::>,<< dddddd.dddd>,
v/Ia,v/Ib,v/Ic,nl,2,<:Masses and Coordinates ::>,nl,1);
Ni:= -3;
for i:=1 step 1 until N do begin
write(res,nl,1,<<dd.dddddd>,mass(i),sp,4); Ni:= Ni+3;
for j:=1 step 1 until 3 do
write(res,<< -dd.dddddddd>,X(Ni+j)) end;
if m0=0 then begin
bmatrix(N,BL,S,X,bout*binp(1),res); bout:= 1;
ns:= 0; for i:=1 step 1 until BL do ns:= ns+S(i,1);
end else begin
for i:=m0-1 step -1 until 0 do begin
mass(N-m0-i):= mass(N-i);
for j:=0,1,2 do Xp(3*(N-m0-i)-j):= Xp(3*(N-i)-j)
end;
N:= N-m0; N3:= N*3; n:= n-2*m0; m0:= 0;
eckart:= true; cycl:= 0; s1:= 100; goto rep
end;
read(in,p); eckart:= p<0 or (p=0 and eckart);
begin
array G(1:ns,1:ns),Z(1:3,1:ns);
begin
integer rk,rl; real p,q;
zone B((ns*N3+127)//128*128,1,stderror);
open(B,4,<:btrack:>,0); inrec(B,ns*N3);
k:= 0;
for i:=1 step 1 until ns do begin l:= 0;
for j:=1 step 1 until i do begin
G(i,j):= G(j,i):=
sum(B(k+m)*B(l+m)/mass((m+2)//3),m,1,N3);
l:= l+N3
end j; k:= k+N3 end i;
if eckart then begin
array J(1:3,1:3), c(1:3), dX(1:N3);
for i:=1 step 1 until N3 do dX(i):= X(i)-Xp(i);
for m:=1 step 1 until 3 do begin
k:= rk:= m mod 3 + 1; l:= rl:= k mod 3 + 1;
for j:=1 step 1 until ns do begin
p:= 0; for i:=N3-3 step -3 until 0 do
p:= p + dX(k+i)*B(rl+i) - dX(l+i)*B(rk+i);
Z(m,j):= p; rk:= rk+N3; rl:= rl+N3
end j end m;
for i:=1 step 1 until 3 do
for j:=i step 1 until 3 do
J(i,j):= -sum(mass(k+1)*Xp(3*k+j)*dX(3*k+i),k,0,N-1);
Ia:= -J(1,1); Ib:= -J(2,2); Ic:= -J(3,3);
J(1,1):= IP(1)+Ib+Ic;
J(2,2):= IP(2)+Ia+Ic;
J(3,3):= IP(3)+Ia+Ib;
syminverse(J,J,3);
for k:=1 step 1 until ns do begin
for m:=1 step 1 until 3 do
c(m):= sum(J(m,i)*Z(i,k),i,1,3);
for m:=1 step 1 until 3 do Z(m,k):= -c(m)
end k;
for m:=1 step 1 until 3 do
for k:=1 step 1 until 3 do It(m,k):= J(m,k)*IP(k);
for m:=1 step 1 until 3 do
for k:=1 step 1 until m do
my(m,k):= sum(It(m,i)*J(k,i),i,1,3);
for m:=1 step 1 until 3 do
for k:=1 step 1 until m do It(m,k):= my(m,k)*v;
write(res,nl,2,<:My-TENSOR (MHz)::>);
writemat(res,<<__-dddddd.dddd>,It,3,3);
end eckart, J, dX
else begin
write(res,nl,2,<:My-TENSOR (PAS, MHz)::>,nl,2);
for m:=1 step 1 until 3 do begin
for k:=1 step 1 until m do my(m,k):= 0;
k:= m mod 3 + 1; l:= k mod 3 + 1;
q:= 1/(It(l,l)-It(k,k)); my(m,m):= It(m,m)*q*q;
write(res,<<__-dddddd.dddd>,my(m,m)*v); q:= q+q;
for j:=1 step 1 until ns do begin
p:= 0; for i:=N3-3 step -3 until 0 do
p:= p + X(k+i)*B(l+i);
Z(m,j):= p*q; l:= l+N3
end j end m; write(res,nl,2) end;
close(B,true) end B;
write(res,nl,1,<:Z-MATRIX ( Å(el. rad.)*sqrt(1/cm*MHz) )::>);
k:= 1; l:= if 6>ns then ns else 6;
repeat:
write(res,nl,1);
for m:=1 step 1 until 3 do begin
write(res,nl,1);
for i:=k step 1 until l do
write(res,<<__-ddd.dddd>,Z(m,i)*5837.5867)
end;
k:= l+1; l:= if l+6>ns then ns else l+6;
if k<=ns then goto repeat;
write(res,nl,3,<:G-MATRIX::>);
writemat(res,<<__-d.dddddd>,G,ns,6);
if NF<>0 then begin array GF(1:NF+3,1:NF+3);
begin array Ginv(1:ns+3,1:ns+3);
for i:=1 step 1 until 3 do begin
for j:=1 step 1 until i do
Ginv(j,i):= my(i,j);
for j:=ns+3 step -1 until 4 do
Ginv(i,j):= Z(i,j-3);
end;
for i:=ns+3 step -1 until 4 do
for j:=ns+3 step -1 until i do
Ginv(i,j):= G(i-3,j-3);
syminverse(Ginv,Ginv,ns+3);
for i:=1 step 1 until 3 do begin
for j:=i step 1 until 3 do
GF(i,j):= Ginv(i,j);
for j:=1 step 1 until NF do
GF(i,3+j):= Ginv(i,CF(j))
end;
for i:=1 step 1 until NF do
for j:=i step 1 until NF do
GF(3+i,3+j):= Ginv(CF(i),CF(j));
end Ginv;
syminverse(GF,GF,3+NF);
write(res,nl,1,<:CONSTRAINED MODEL:
Free coordinates::>);
for i:=1 step 1 until NF do write(res,<: S:>,<<d>,CF(i)-3);
write(res,nl,2,<:My-TENSOR::>);
for i:=1 step 1 until 3 do
for j:=1 step 1 until i do GF(i,j):= GF(i,j)*v;
writemat(res,<<__-dddddd.dddd>,GF,3,3);
write(res,nl,1,<:Z-MATRIX ( Å(el. rad.)*sqrt(1/cm*MHz) )::>,nl,1);
for m:=1 step 1 until 3 do begin write(res,nl,1);
for j:=1 step 1 until NF do
write(res,<<__-ddd.dddd>,GF(m,j+3)*5837.5867);
end;
write(res,nl,3,<:G-MATRIX::>,nl,1);
for i:=1 step 1 until NF do begin write(res,nl,1);
for j:=1 step 1 until i do
write(res,<<__-d.dddddd>,GF(i+3,j+3))
end end end G,Z;
end It;
if p=0 then goto stop; p:= abs p;
i:= 1; write(res,<:<12>:>,nl,4,string head(increase(i)));
if eckart then write(res,nl,1,<:Eckart conditions applied.:>);
write(res,nl,3);
for p:= p-1 while p>=0 do begin
read(in,q,v); m:= t(q,1); g(q):= if m=1 then v else v*pi/180;
i:= t(q,2); j:= t(q,3); k:= t(q,4); l:= t(q,5);
write(res,nl,1,case m of (<:distance :>,<:angle :>,
<:outo :>,<:tors :>,<:sum of :>));
write(res,<<-d>,i,-j); if m=2 then write(res,<<-d>,-k);
if m=3 or m=4 then write(res,<<-d>,-k,-l);
if m<5 then write(res,<: = :>,<<-ddd.ddd00>,v)
end;
cycl:= 0; s1:= 100; goto rep
end t,g end X;
stop:
write(res,nl,5,<:<25>:>); close(res,closeres)
end
▶EOF◀