|
|
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: 45312 (0xb100)
Types: TextFile
Names: »asm«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦7e928b248⟧ »algbib«
└─⟦this⟧
;algasmixx
;gosav
asmixx=set 91
permanent asmixx.17
asmixx=algol list.no index.no
\f
begin
integer i,j,k,l,m,m1,N,N1,J1,J2,Q,linecount,page,space,version;
real s, so, starttime, stoptime, cpu, time, Z, steplength;
boolean slut,deltarot,deltacd,iterer,oblat,atype,
closeres,quartic,couple,fixed,hb;
array Rot(1:9), D(1:10), head(1:12);
zone res(128,1,stderror);
procedure writecr;
begin linecount:= linecount+1;
write(res,<:<10>:>); if linecount>59 then writepage
end writecr;
procedure writepage;
begin integer i;
page:= page+1; linecount:= 3; i:= 1;
write(res,<:<12>:>,false add 10,3,string head(increase(i)),
false add 32, space,<<dd>, page, false add 10, 2)
end writepage;
closeres:=outmedium(res);
dataind:
cpu:= systime(1,0,starttime);
space:= 68 - readhead(in,head,1);
read(in,m1); repeatchar(in); readchar(in,j);
atype:= false add j;
read(in,stoptime,Rot,N,steplength);
stoptime:= stoptime*60;
slut:= m1>0; m1:= abs m1; m:= m1//1000; fixed:=m>0;
deltarot:= m1 mod 1000 >= 100; version:= m1 mod 10;
deltacd := m1 mod 100 >= 10; iterer := N<>0;
page:= 0; writepage; write(res,<:
Calculation by ASMIX-X,YZ of 23-3-1976
:>);
case version of begin
begin
linecount:= linecount+4; Q:=19; write(res,<:
D1 = Dj, D2 = Djk, D3 = Dk, D4 = dj, D5 = djk, (kHz)
:>) end vers1;
begin
linecount:= linecount+6; Q:=19; write(res,<:
D1 = tau-aaaa, D2 = tau-bbbb, D3 = tau-cccc,
D4 = tau-abab + tau-caca*(A-B)/(A-C),
D5 = tau-bcbc + tau-caca*(B-C)/(A-C), (MHz).
:>) end vers2;
begin
Q:=9
end vers3;
begin
Q:=19; linecount:=linecount+5;
write(res,<:
Version for analysis of transitions between K-doublet levels
(see J.Mol.Structure 8 (1971) 217). Constants in kHz.
:>);
end vers4;
end;
oblat:= 2*Rot(2)>(Rot(1)+Rot(3));
j:= atype extract 12;
atype:= j<>98;
if atype and j<>97 then atype:= oblat;
N1:= if iterer then N else 1;
l:= Q-m;
begin
integer k11,k12,k21,k22,type1,type2,min,xx,yy,zz,xy,yz,zx,v1,v2,
xxt,yyt,zzt,xyt,yzt,zxt;
array DR(1:10),tr(1:N1),an(1:l,1:l+1),AO(1:Q),cif(1:l),DW(0:1);
integer array qn(1:N1,1:3), MATRIX(1:16);
boolean array nf(1:Q);
min:=i:= 1;
if version<>3 then for i:=1,i+1 while k<>10 do begin
if i>10 then begin write(res,<:
***delimiter error in C.D.constant input.:>); goto stop end;
read(in,DR(i)); repeatchar(in); readchar(in,k) end;
for j:=i step 1 until 10 do DR(j):= 0;
for j:=1 step 1 until 10 do D(j) := 0;
for j:=1 step 1 until Q do nf(j):=false;
for j:=1 step 1 until m do begin
read(in,k); nf(k):=true; AO(k):=0
end;
if iterer then begin
integer q,max,my;
boolean b11,b12,b21,b22;
max:=1; writecr;writecr;write(res,<:Input transitions:
_(v->v'),(J,k-,k+)->(J'k-'k+')_dip______freq.:>); writecr;
for k:=1 step 1 until N do begin
read(in, v1, v2, J1, k11, k12, J2, k21, k22, my, tr(k));
writecr; write(res,<<ddd>,v1,v2,<:__:>,J1,k11,k12,<:__:>,J2,k21,
k22,<:__:>,my,<<___ddd ddd.ddd>,tr(k));
repeatchar(in); for i:=readchar(in,j) while j<>10 and j<>9 do;
b11:=k11=k11//2*2; b12:=k12=k12//2*2;
b21:=k21=k21//2*2; b22:=k22=k22//2*2;
type1:=if b11 and b12 then 1 else
if b11 and-,b12 then 2 else
if -,b11 and b12 then 3 else 4;
type2:=if b21 and b22 then 1 else
if b21 and-,b22 then 2 else
if -,b21 and b22 then 3 else 4;
b11:= b11==b21; b22:= b12==b22;
if my<>(if b11 and-,b22 then 1 else
if b22 and-,b11 then 3 else 2)or abs(J1-J2)>1 then begin
N1:=N1-1; write(res,<:***fault***:>);
if k=min then max:=min:=min+1;
goto linieslut end;
qn(k,1):= v1 shift 2 add v2 shift 6 add J1 shift 6
add k11 shift 6 add k12;
qn(k,2):= J2 shift 6 add k21 shift 6 add k22 shift 3
add type1 shift 3 add type2;
qn(k,3):= min; q:=max;
for i:=min,qn(i,3) while i<>min do
if qn(i,1)<=qn(k,1) then q:=i else i:= max;
if q=max then begin
if qn(k,1)>=qn(max,1) then max:=k else
if qn(k,1)<qn(min,1) then min:=k end;
qn(k,3):= qn(q,3); qn(q,3):= k;
linieslut: end k;
writecr; writecr; write(res,<:Total number: :>,<<ddd>,N1);
writecr; writecr
end reading and control of transitions;
write(res,<:Steplength::>,<< d.dd>,steplength);
writecr; writecr;
if m=1 then write(res,<:Fixed Constant::>) else
if m>1 then write(res,<:Fixed Constants::>);
if fixed then for i:=1 step 1 until Q do
if nf(i) then begin
writecr; AO(i):= 0;
if i<10 then begin
so:= Rot(i);
if deltarot or i>6 then write(res,<:_____:>,case i of
(<:_(A0+A1)/2:>,<:_(B0+B1)/2:>,<:_(C0+C1)/2:>,
<:___(A0-A1):>,<:___(B0-B1):>,<:___(C0-C1):>,
<:delta Evib:>,<:__Gvib-rot:>,<:__Fvib-rot:>),<: = :>)
else write(res,<:_____________:>,case i of
(<:A0 = :>,<:B0 = :>,<:C0 = :>,
<:A1 = :>,<:B1 = :>,<:C1 = :>));
write(res,if abs so=0 then <<d> else <<-ddd ddd.dddd>,so);
end else begin
k:=i-9; so:= DR(k);
if deltacd then write(res,case k of
(<:(D1(0)+D1(1))/2 = :>,<:(D2(0)+D2(1))/2 = :>,
<:(D3(0)+D3(1))/2 = :>,<:(D4(0)+D4(1))/2 = :>,
<:(D5(0)+D5(1))/2 = :>,<: D1(0)-D1(1) = :>,
<:____D2(0)-D2(1) = :>,<:____D3(0)-D3(1) = :>,
<:____D4(0)-D4(1) = :>,<:____D5(0)-D5(1) = :>))
else begin
j:=if k>5 then k-5 else k;
write(res,<:__________D:>,<<d>,j,if k>5 then <:(1) = :>
else <:(0) = :>)
end;
write(res,if abs so=0 then <<d> else <<-ddd.ddd0000>,so);
end;
end;
if fixed then writecr; systime(1,starttime,time);
s:= 0; so:= 2**64;
m1:= if -,iterer then 0 else if N1=l then 1 else N1-l;
if atype then begin
for i:=1 step 1 until 16 do
MATRIX(i):= case i of (1,4,2,3,2,3,1,4,4,1,3,2,3,2,4,1);
xx:= 1; yy:= 2; zz:= 3; xy:= 4; yz:= 5; zx:= 6
end else begin
for i:=1 step 1 until 16 do
MATRIX(i):= case i of (1,2,3,4,2,1,4,3,4,3,2,1,3,4,1,2);
zz:= 1; xx:= 2; yy:= 3; zx:= 4; xy:= 5; yz:= 6
end;
if oblat then begin
xxt:=1; yyt:=2; zzt:=3; xyt:=4; yzt:=5; zxt:=6;
end else begin
zzt:=1; xxt:=2; yyt:=3; zxt:=4; xyt:=5; yzt:=6;
end;
igen:
quartic:= false; couple:=Rot(7)<>0 or Rot(8)<>0 or Rot(9)<>0;
for i:= 1 step 1 until 10 do quartic:= quartic or DR(i)<>0;
begin
real p,pp,y,a0,b0,c0,a1,b1,c1,r1,r2,r3,r4,r5,r6,r7,r8,r9,
s1,s2,s3,s4,s5,s6,s7,s8,s9,X0,Y0,Z0,X1,Y1,Z1;
boolean ha,hm;
array ai(1:Q+1);
ha:= s=so; hb:=false;
if deltarot then begin
p:=Rot(1);pp:=Rot(4);a0:=ai(1):=0.5*(p+p+pp);a1:=ai(4):=a0-pp;
p:=Rot(2);pp:=Rot(5);b0:=ai(2):=0.5*(p+p+pp);b1:=ai(5):=b0-pp;
p:=Rot(3);pp:=Rot(6);c0:=ai(3):=0.5*(p+p+pp);c1:=ai(6):=c0-pp;
X0:=ai(xx); Y0:=ai(yy); Z0:=ai(zz);
X1:=ai(3+xx); Y1:=ai(3+yy); Z1:=ai(3+zz);
end else begin
X0:=Rot(xx); Y0:=Rot(yy); Z0:=Rot(zz);
X1:=Rot(3+xx); Y1:=Rot(3+yy); Z1:=Rot(3+zz);
a0:=Rot(1); b0:=Rot(2); c0:=Rot(3);
a1:=Rot(4); b1:=Rot(5); c1:=Rot(6);
end;
if -,ha and iterer then writepage;
if deltacd then begin
for i:=1 step 1 until 5 do begin
j:=i+5; p:=DR(i); pp:=DR(j); y:=D(i):=0.5*(p+p+pp); D(j):=y-pp
end i;
end else for i:=1 step 1 until 10 do D(i):=DR(i);
case version of begin
begin
if -,oblat==atype then begin
ai(xxt):= -(D(1) + D(4)*2)*4;
ai(yyt):= -(D(1) - D(4)*2)*4;
ai(zzt):= -(D(1) + D(2) + D(3))*4;
ai(xyt):= -D(1)*4;
ai(yzt):= -(D(1) + D(2)*0.5 - D(4) - D(5))*4;
ai(zxt):= -(D(1) + D(2)*0.5 + D(4) + D(5))*4;
ai(6+xxt):= -(D(6) + D(9)*2)*4;
ai(6+yyt):= -(D(6) - D(9)*2)*4;
ai(6+zzt):= -(D(6) + D(7) + D(8))*4;
ai(6+xyt):= -D(6)*4;
ai(6+yzt):= -(D(6) + D(7)*0.5 - D(9) - D(10))*4;
ai(6+zxt):= -(D(6) + D(7)*0.5 + D(9) + D(10))*4;
hb:= true
end else begin
for i:=1 step 1 until 10 do D(i):= D(i)*'-3;
DW(0):=DW(1):=0
end end vers1;
begin
comment The standard constants are calculated in ai (in kHz)
using the Dowling relations and assuming tau-caca=0;
r4:= a0/b0; r8:= b0/c0; r3:= c0/a0;
r4:= -r4*r4; r8:= r8*r8; r3:= r3*r3;
r1:= 1/r4; r5:= 1/r8; r9:= 1/r3;
r2:= r1*r3; r6:= r4*r5; r7:= r8*r9;
s4:= a1/b1; s8:= b1/c1; s3:= c1/a1;
s4:= -s4*s4; s8:= s8*s8; s3:= s3*s3;
s1:= 1/s4; s5:= 1/s8; s9:= 1/s3;
s2:= s1*s3; s6:= s4*s5; s7:= s8*s9;
for j:=1,2,3 do ai(j):= D(j)*'3;
for j:=7,8,9 do ai(j):=D(j-1)*'3;
ai(4) :=(D(1)*r1 + D(2)*r4 + D(3)*r7)*0.5 + D(4)*2;
ai(5) :=(D(1)*r2 + D(2)*r5 + D(3)*r8)*0.5 + D(5)*2;
ai(6) :=(D(1)*r3 + D(2)*r6 + D(3)*r9)*0.5;
ai(10):=(D(6)*s1 + D(7)*s4 + D(8)*s7)*0.5 + D(9)*2;
ai(11):=(D(6)*s2 + D(7)*s5 + D(8)*s8)*0.5 + D(10)*2;
ai(12):=(D(6)*s3 + D(7)*s6 + D(8)*s9)*0.5;
for j:=4,5,6,10,11,12 do ai(j):= ai(j)*'3;
hb:=true
end vers2;
begin
for i:=1 step 1 until 10 do D(i):=0; DW(0):=DW(1):=0
end vers3;
begin
if -,oblat and atype then begin
r1:= (Y0-Z0)/(X0+X0-Y0-Z0);
s1:= (Y1-Z1)/(X1+X1-Y1-Z1)
end else begin
r1:= (X0-Y0)/(Z0+Z0-X0-Y0);
s1:= (X1-Y1)/(Z1+Z1-X1-Y1)
end;
a0:=D(1)+D(3)*r1*r1*2;
b0:=D(2)-D(4)*r1;
ai(xxt):=(a0+b0+D(5))*4;
ai(yyt):=(a0-b0+D(5))*4;
ai(zzt):=(D(3)-D(4)+D(5))*4;
ai(yzt):=(-b0-D(4))*2+D(5)*4;
ai(zxt):=( b0-D(4))*2+D(5)*4;
ai(xyt):=(-a0+D(5))*4;
a1:=D(6)+D(8)*s1*s1*2;
b1:=D(7)-D(9)*s1;
ai(6+xxt):=(a1+b1+D(10))*4;
ai(6+yyt):=(a1-b1+D(10))*4;
ai(6+zzt):=(D(8)-D(9)+D(10))*4;
ai(6+yzt):=(-b1-D(9))*2+D(10)*4;
ai(6+zxt):=( b1-D(9))*2+D(10)*4;
ai(6+xyt):=(-a1+D(10))*4;
hb:=true
end vers4;
end case version;
if hb then begin
comment Calculation of D-constants from standard constants,
and correction of rotational constants;
p:= -1/16000;
D(1) := ((ai(xx)+ai(yy))*1.5+ai(xy))*p;
D(2) := -D(1)*2 + (ai(yz)+ai(zx))*4*p;
D(3) := -D(1)-D(2)+ai(zz)*4*p;
D(4) := (ai(xx)-ai(yy))*p;
D(5) := -D(4)-(ai(yz)-ai(zx))*2*p;
DW(0):= (ai(xx)+ai(yy)-ai(xy)*2)*p;
D(6) := ((ai(6+xx)+ai(6+yy))*1.5+ai(6+xy))*p;
D(7) := -D(6)*2 + (ai(6+yz)+ai(6+zx))*4*p;
D(8) := -D(6)-D(7)+ai(6+zz)*4*p;
D(9) := (ai(6+xx)-ai(6+yy))*p;
D(10):= -D(9)-(ai(6+yz)-ai(6+zx))*2*p;
DW(1):= (ai(6+xx)+ai(6+yy)-ai(6+xy)*2)*p;
X0:=X0+DW(0); Y0:=Y0+DW(0); Z0:=Z0-DW(0)*1.5;
X1:=X1+DW(1); Y1:=Y1+DW(1); Z1:=Z1-DW(1)*1.5;
DW(0):=DW(0)/4; DW(1):=DW(1)/4;
end hb;
write(res,<:<10><10>:>,if deltarot then
<:Mean- and differences of :> else <::>,
<:Rotational constants (MHz):<10> :>); k:=0; m:=5;
for j:=1,4 do begin
for i:=j step 1 until j+2 do
write(res,<<__-ddd_ddd.dddddd>,Rot(i));
if ha then begin
write(res,<:<10>+-:>);
for i:=j step 1 until j+2 do
if nf(i) then write(res,<:_______Fixed_____:>)
else begin
k:=k+1; write(res,<<___dd0_000.000000>,sqrt(an(k,k)*s))
end nf;
m:=m+1
end ha;
if j=1 then write(res,<:<10><10> :>);
end j;
if couple then begin
m:=m+4;
write(res,<:<10>
Energy difference between coupling states
and :>,false add (if atype then 97 else 98),1,
<:-type coupling constant (MHz):<10> :>);
for i:=7,8,9 do write(res,<<_-d_ddd_ddd.dddddd>,Rot(i));
if ha then begin
write(res,<:<10>+-:>);
for i:=7,8,9 do
if nf(i) then write(res,<:________Fixed_____:>)
else begin
k:=k+1; write(res,<<__d_d00_000.000000>,sqrt(an(k,k)*s))
end nf;
m:=m+1
end ha;
end couple;
if quartic then begin
m:=m+5;
write(res,<:<10><10>:>, if deltacd then
<:Mean- and differences of :> else <::>,
<:Quartic distortion constants:<10> :>);
for j:=1,6 do begin
for i:=j step 1 until j+4 do
write(res,<<-dddd.dddd000>,DR(i));
if ha then begin
write(res,<:<10>+-:>);
for i:=j+9 step 1 until j+13 do
if nf(i) then write(res,<:____Fixed____:>)
else begin
k:=k+1; write(res,<<_dd00.0000000>,sqrt(an(k,k)*s))
end nf;
m:=m+1
end ha;
if j=1 then write(res,<:<10><10> :>);
end j;
end quartic;
linecount:=linecount+m;
if ha and -,iterer then begin
writecr; writecr; writecr;
write(res,<:Significant Digits and Correlation Matrix::>);
pp:= ln(10);
writecr; linecount:=linecount - 4;
for i:=1 step 1 until l do begin p:= an(i,i);
AO(i):= if p>0 then 1/sqrt(p) else 0 end;
N:= (l-1) mod 6 + 1; k:= 1;
Cor: for i:=1 step 1 until N do begin writecr;
for j:=k step 1 until i-1 do write(res,false add 32,8);
if j=i then begin j:= j+1;
write(res,<<__dd>,entier(ln(cif(i))/pp)+2,<:____:>) end;
for j:=j step 1 until N do
write(res,<<__-d.ddd>,an(i,j)*AO(i)*AO(j)*0.5)
end i;
writecr; k:= N+1; N:= N+6; if k<l then goto Cor;
linecount:= linecount+4 end ha;
write(res,false add 10,3);
if iterer then begin
write(res,false add 32,30,<:obs______obs.-_______:>);
if couple then write(res,<:coupling__:>);
if quartic then write(res,<:centrifugal:>); writecr;
write(res,<:_______Transition__________frequency___calc.___t:>,
<:___:>);
end else begin
read(in,N1); if N1<0 then goto stop;
if linecount > 50 then writepage;
write(res,false add 32,29,<:calc.____________:>);
if couple then write(res,<:coupling__:>);
if quartic then write(res,<:centrifugal:>);
write(res,<:
_______Transition_________frequency____sigma__:>);
end;
if couple then write(res,<:contrib.__:>);
if quartic then write(res,<:distortion:>);
writecr; if iterer then s:=0;
p:=Y0; Y0:=(X0-p)*0.25; X0:=(X0+p)*0.5; Z0:=Z0-X0;
p:=Y1; Y1:=(X1-p)*0.25; X1:=(X1+p)*0.5; Z1:=Z1-X1;
begin
integer line, matr, nr, type, JJ, J0, vk, i1, i2, k1, k2;
real lambda,Li,dE,Px,Pyz,S,S2;
array atot(1:if iterer then N1 else 1,1:l+1),PG(1:Q),
PS(1:if hb then 12 else 1),
Pxy,Pz,Pzxy,Pxyxy,Pz4,F,G,H,G1,H1,G2,norm(0:1);
integer array kk(0:1);
for line:= min, qn(line,3) while line<>min do begin
if iterer then begin
N:= qn(line,1);
v1:=N shift (-20) extract 2;
v2:=N shift (-18) extract 2;
J1:=N shift (-12) extract 6;
k11:=N shift (-6) extract 6;
k12:=N extract 6;
N:= qn(line,2);
J2:=N shift (-18) extract 6;
k21:=N shift (-12) extract 6;
k22:=N shift (-6) extract 6;
type1:=N shift (-3) extract 3;
type2:=N extract 3;
Li:= tr(line)
end else begin
boolean b11,b12,b21,b22;
nylinie: v1:= N1;
if v1<0 then goto stop;
read(in, v2, J1, k11, k12, J2, k21, k22, j);
repeatchar(in);
for N:= readchar(in,k) while k<>10 and k<>9 do;
read(in,N1); qn(line,3):= 1; min:= 0;
b11:=k11=k11//2*2; b12:=k12=k12//2*2;
b21:=k21=k21//2*2; b22:=k22=k22//2*2;
type1:=if b11 and b12 then 1 else
if b11 and-,b12 then 2 else
if -,b11 and b12 then 3 else 4;
type2:=if b21 and b22 then 1 else
if b21 and-,b22 then 2 else
if -,b21 and b22 then 3 else 4;
b11:= b11==b21; b22:= b12==b22;
if j<>(if b11 and-,b22 then 1 else
if b22 and-,b11 then 3 else 2)
or abs(J1-J2)>1 then goto nylinie
end;
for j:=1 step 1 until Q+1 do ai(j):= 0;
dE:= 0;
for k:=-1,1 do begin
if k=-1 then begin
J0:=J1; type:=type1; nr:=(J1-k11)//2; vk:=v1
end else begin
J0:=J2; type:=type2; nr:=(J2-k21)//2; vk:=v2
end;
if J0=0 then begin
if vk=1 then begin dE:=dE+Rot(7)*k; ai(7):=ai(7)+k end
end else begin
if J0//2*2<>J0 then type:=type+4; matr:=MATRIX(type);
j:=if matr=1 then 2 else if matr=2 then 0 else 1;
nr:=(J0+j)//2-nr; JJ:=J0*(J0+1);
if vk=1 then matr:=MATRIX(type+8);
hm:=matr=1 or matr=3;
if hm then begin
i:=1; j:=0; i1:=1
end else begin
i:=0; j:=1; i1:=0
end;
F(i) :=(X0-D(1)*JJ)*JJ; F(j) :=(X1-D(6)*JJ)*JJ+Rot(7);
G(i) :=Z0-D(2)*JJ; G(j) :=Z1-D(7)*JJ;
H(i) :=Y0-D(4)*JJ; H(j) :=Y1-D(9)*JJ;
G1(i):=-D(3); G1(j):=-D(8);
H1(i):=-0.5*D(5); H1(j):=-0.5*D(10);
G2(i):=DW(0); G2(j):=DW(1);
Px:=0.5*Rot(8); Pyz:=0.5*Rot(9);
if matr=1 or matr=4 then begin
p:=2; k1:=-1; N:=J0+1
end else begin
p:=1; k1:=0; N:=J0
end;
begin
array u(1:N,1:N),Pdif,Pdifx,ev(1:N);
integer array sym(1:N);
for i:=1 step 1 until N do
for j:=1 step 1 until i do u(i,j):=0;
Pdif(1):=Pdifx(1):=0; if N>1 then Pdif(2):=0;
for i:=1 step 1 until N do begin
i2:=i mod 2; k1:=k1+1; k2:=k1*k1;
u(i,i):=F(i2)+(G(i2)+G1(i2)*k2)*k2;
if i<N then begin
p:=p*(J0-k1)*(J0+k1+1); j:=i+1;
Pdifx(j):=sqrt(p);
u(j,i):=Pdifx(j)*(Pyz*(k1+k1+1)
+(if i1=i2 then Px else -Px));
if j<N then begin
p:=p*(J0-k1-1)*(J0+k1+2); j:=j+1;
Pdif(j):=-sqrt(p);
u(j,i):=(H(i2)+H1(i2)*(k2+(k1+2)**2))*Pdif(j);
end;
end;
if i>4 then u(i,i-4):=-G2(i2)*Pdif(i)*Pdif(i-2);
p:=1
end;
if matr=1 or matr=4 then begin
u(2,2):=u(2,2)+(H(0)+H1(0)*2)*JJ;
Pdif(2):=JJ//2;
if N>3 then begin
u(4,2):=u(4,2)-G2(0)*Pdif(4)*JJ;
u(3,3):=u(3,3)-G2(1)*(JJ-2)*JJ
end;
end else begin
u(1,1):=u(1,1)-(H(1)+H1(1)*2)*JJ;
Pdif(1):=-JJ//2;
if N>2 then u(3,1):=u(3,1)+G2(1)*Pdif(3)*JJ;
if N>1 then u(2,2):=u(2,2)+G2(0)*(JJ-2)*JJ
end;
tridql(N,ev,u);
k1:=(N+1)//2; k2:=N//2;
for i:=1 step 1 until N do begin
p:=pp:=0;
for j:=1 step 2 until N do
p:=p+u(i,j)**2;
for j:=2 step 2 until N do
pp:=pp+u(i,j)**2; if k2=0 then pp:=0;
sym(i):=if (p>pp)==hm then 0 else 1;
end;
k1:=0;
for i:=1,i+1 while k1<>nr do begin
if vk=sym(i) then k1:=k1+1;
end;
nr:=i-1; lambda:=ev(nr);
for i:=0,1 do norm(i):=F(i):=G(i):=H(i):=H1(i):=Pz(i):=
Pz4(i):=Pxy(i):=Pzxy(i):=Pxyxy(i):=0;
kk(0):=kk(1):=0; p:=pp:=Px:=Pyz:=0; k1:=J0; k2:=k1*k1;
for i:=N step -1 until 1 do begin
i2:=i mod 2; S:=u(nr,i); S2:=S*S;
norm(i2):=norm(i2)+S2;
H(i2):=H(i2)*S+H1(i2); H1(i2):=F(i2);
F(i2):=F(i2)*S; p:=p*S; pp:=pp*S;
Px:=Px+p; Pyz:=Pyz+pp; S2:=S2*k2;
p:=Pdifx(i)*S*(if i1=i2 then -1 else 1);
pp:=Pdifx(i)*S*(k1+k1-1);
Pz(i2):=Pz(i2)+S2;
Pz4(i2):=Pz4(i2)+S2*k2;
Pxy(i2):=Pxy(i2)+F(i2);
Pzxy(i2):=Pzxy(i2)+(kk(i2)+k2)*F(i2);
Pxyxy(i2):=Pxyxy(i2)+H(i2)*H(i2); H(i2):=Pdif(i);
F(i2):=H(i2)*S; k1:=k1-1; kk(i2):=k2; k2:=k1*k1;
end;
G(1):=u(nr,1); if N>1 then G(0):=u(nr,2);
for i:=0,1 do begin
H(i):=F(i)+H1(i)/2; F(i):=F(i)*G(i);
Pxy(i):=Pxy(i)+F(i); Pzxy(i):=Pzxy(i)+F(i)*2;
Pxyxy(i):=Pxyxy(i)/4+H(i)*H(i);
F(i):=norm(i)*JJ-Pz(i);
end i;
if hm then begin
i:=1; j:=0
end else begin
i:=0; j:=1
end;
PG(zz):=Pz(i); PG(3+zz):=Pz(j);
PG(xx):=0.5*(F(i)+Pxy(i)); PG(3+xx):=0.5*(F(j)+Pxy(j));
PG(yy):=0.5*(F(i)-Pxy(i)); PG(3+yy):=0.5*(F(j)-Pxy(j));
PG(7):=norm(j); PG(8):=Px; PG(9):=Pyz;
if hb then begin
y:=(norm(i)*JJ-Pz(i)*2)*JJ+Pz4(i);
pp:=2*JJ*Pxy(i)-Pzxy(i);
PS(xx):=(y+pp+Pxyxy(i))/16;
PS(yy):=(y-pp+Pxyxy(i))/16;
PS(zz):=Pz4(i)/4;
PS(xy):=(y-Pxyxy(i))/8;
y:=JJ*Pz(i)-Pz4(i);
PS(yz):=(y+y-Pzxy(i))/8;
PS(zx):=(y+y+Pzxy(i))/8;
y:=(norm(j)*JJ-Pz(j)*2)*JJ+Pz4(j);
pp:=2*JJ*Pxy(j)-Pzxy(j);
PS(6+xx):=(y+pp+Pxyxy(j))/16;
PS(6+yy):=(y-pp+Pxyxy(j))/16;
PS(6+zz):=Pz4(j)/4;
PS(6+xy):=(y-Pxyxy(j))/8;
y:=JJ*Pz(j)-Pz4(j);
PS(6+yz):=(y+y-Pzxy(j))/8;
PS(6+zx):=(y+y+Pzxy(j))/8;
if version=1 or version=4 then begin
for k1:=0,1 do begin
m:= if k1=i then 0 else 3;
Pz(k1):= PG(zzt+m);
Pxy(k1):= PG(xxt+m)-PG(yyt+m); m:= m+m;
Pz4(k1):= PS(zzt+m)*4;
Pzxy(k1):= (PS(zxt+m)-PS(yzt+m))*4;
Pxyxy(k1):= (PS(xxt+m)+PS(yyt+m)-PS(xyt+m))*4
end end end hb;
case version of begin
begin
p:=-0.001;
PG(10):=p*JJ*JJ*norm(i);
PG(11):=p*JJ*Pz(i);
PG(12):=p*Pz4(i);
PG(13):=(p+p)*JJ*Pxy(i);
PG(14):=p*Pzxy(i);
PG(15):=p*JJ*JJ*norm(j);
PG(16):=p*JJ*Pz(j);
PG(17):=p*Pz4(j);
PG(18):=(p+p)*JJ*Pxy(j);
PG(19):=p*Pzxy(j)
end vers1;
begin
p:=0.000001;
PG(10):= PS(1)+(PS(4)*r1+PS(5)*r2+PS(6)*r3)*0.5;
PG(11):= PS(2)+(PS(4)*r4+PS(5)*r5+PS(6)*r6)*0.5;
PG(12):= PS(3)+(PS(4)*r7+PS(5)*r8+PS(6)*r9)*0.5;
PG(13):= PS(4)*2; PG(14):= PS(5)*2;
PG(15):=PS(7)+(PS(10)*s1+PS(11)*s2+PS(12)*s3)*0.5;
PG(16):=PS(8)+(PS(10)*s4+PS(11)*s5+PS(12)*s6)*0.5;
PG(17):=PS(9)+(PS(10)*s7+PS(11)*s8+PS(12)*s9)*0.5;
PG(18):=PS(10)*2; PG(19):=PS(11)*2;
end vers2;
begin
end vers3;
begin
PG(10):=Pxyxy(i);
PG(11):=Pxy(i)*JJ;
PG(12):=Pz4(i)+Pxyxy(i)*r1*r1*2;
PG(13):=-(Pz(i)+Pxy(i)*r1)*JJ;
PG(14):=norm(i)*JJ*JJ;
PG(15):=Pxyxy(j);
PG(16):=Pxy(j)*JJ;
PG(17):=Pz4(j)+Pxyxy(j)*s1*s1*2;
PG(18):=-(Pz(j)+Pxy(j)*s1)*JJ;
PG(19):=norm(j)*JJ*JJ;
for i:=10 step 1 until 19 do PG(i):=PG(i)*0.001
end vers4;
end case version;
dE:= dE + k*lambda;
for j:=1 step 1 until Q do ai(j):= ai(j) + PG(j)*k
end u;
end J0<>0;
end k;
if iterer then begin
dE:= ai(Q+1):= Li - dE; s:= s + dE*dE
end else begin
Li:= dE; dE:= 0
end;
if deltarot then for i:=1,2,3 do begin
p:=ai(i); j:=i+3; ai(i):=p+ai(j); ai(j):=0.5*(p-ai(j))
end;
if quartic then begin
if deltacd then for i:=10 step 1 until 14 do begin
p:=ai(i); j:=i+5; ai(i):=p+ai(j); ai(j):=0.5*(p-ai(j))
end deltacd;
pp:=0;
for i:=10 step 1 until 19 do pp:=pp+ai(i)*DR(i-9)
end quartic;
if couple then p:=ai(8)*Rot(8)+ai(9)*Rot(9);
k:=Q+1; k1:=-1;
if fixed then
for i:=1 step 1 until Q do
if nf(i) then begin
k:=k-1; k1:=k1+1; for j:=i-k1 step 1 until k do ai(j):=ai(j+1);
end nf;
if ha then begin y:= 0;
for j:=l step -1 until 1 do
for k:=l step -1 until j do y:= y + ai(j)*ai(k)*an(j,k);
if iterer then y:= if 1-y<=0 then 9.9 else dE/sqrt(so*(1-y))
else dE:= sqrt(y*s)
end;
writecr; write(res,<<dd>,v1,v2,<: :>,<<ddd>,J1,k11,k12,<: :>,
J2,k21,k22,<: :>,<<ddd ddd.ddd>,Li,<<-ddd.ddd>,dE);
if iterer then write(res,<< -d.d>,if ha then y else 0);
if couple then write(res,<< -dddd.ddd>,p);
if quartic then write(res,<< -dddd.ddd>,pp);
if iterer then
for j:=1 step 1 until l+1 do atot(line,j):= ai(j)
end step over observed transitions, line;
s:= s/m1; hb:= so = 2**64;
if so>=s then begin for j:=1 step 1 until l do begin
p:= 0;
for i:=1 step 1 until N1 do begin
pp:= abs atot(i,j); if pp>p then p:= pp
end;
cif(j):= p
end end;
Z:= ortho(atot,an,N1,l)
end atot;
comment The proceduren ortho solves the equation a x = b,
where the rectangular matrix a as well as b is stored in
atot. an is a l*(l+1) array containing by return the solu-
tion x (in column no. l+1) and the covariance matrix;
write(res,<:<10>:>);
if so<s then begin
write(res,<:<10>Stop on divergency:>);
for i:=1 step 1 until 9 do Rot(i):= Rot(i)-AO(i);
if quartic then for i:=1 step 1 until 10 do DR(i):=DR(i)-AO(i+9)
end else begin
k:= 0; p:= l/sqrt(s);
for i:=1 step 1 until l do cif(i):= cif(i)*p;
for j:=1 step 1 until Q do begin
if -,nf(j) then begin
k:=k+1; p:=AO(j):=an(k,l+1)*steplength;
hb:=hb or cif(k)*p>steplength;
if j<10 then begin
Rot(j):=AO(j)+Rot(j);
cif(k):=cif(k)*abs Rot(j)
end else begin
DR(j-9):=AO(j)+DR(j-9);
cif(k):=cif(k)*abs DR(j-9)
end;
end nf;
end;
end so;
for i:=1 step 1 until l do
for j:=i+1 step 1 until l do an(i,j):=an(i,j)*2;
y:= systime(1,starttime,p); pp:= p-time; time:= p;
iterer:= (hb or so>s+s) and p+pp<stoptime; so:= s;
write(res,<:<10>rms deviation: :>,<<dd.dddd>,sqrt(s),
<: time, cpu: :>,(y-cpu)/60,<: , real: :>,p/60,<:
Gramdet.: :>,<<d.d'-dd>,Z);
if closeres then begin
write(out,<:rms::>,<<__dd.dddd>,sqrt(s),<:__tid::>,
p/60,<:<10>:>); setposition(out,0,0)
end;
writepage end;
goto igen;
stop:
if -,slut then goto dataind end;
write(res,<:<10><12><25>:>); close(res,closeres) end
;goasm
;gosav time.300 lines.5000
gtxt=set 50
permanent gtxt.15
gtxt=edit algasmixx c.50
l1,r/91/110/,
l2,r/no/yes/,
l./MATRIX/,r/;/, AUXMAT(1:8);/
l./if oblat/,l3,i/
for i:=1 step 1 until 8 do
AUXMAT(i):= case i of (1,2,3,4,2,1,4,3);
/,p1,l./integer line/,r/J0/J0,N0/
l1,r/dE/dE,dE0/,l./goto nylinie/,
l3,r/d/dE0:=d/
l./nr:=/,g2?//2?//2+1?
l./nr:=(J0+j)/,r/nr/N0/,r/-nr//
l./array u/,r/u(1:N,1:N)/e(1:N,0:4)/,r/ev/b/,l1,d2
l./u(i,i)/,r/u(i,i)/e(i,0)/,r/;/; e(i,3):= 0;/
l4,r/u(j,i)/e(j,1)/
l5,r/u(j,i)/e(j,2)/
l3,r/u(i,i-4)/e(i,4)/,l4,g/u(2,2)/e(2,0)/
l3,g/u(4,2)/e(4,2)/,l1,g/u(3,3)/e(3,0)/
l3,g/u(1,1)/e(1,0)/,l2,g/u(3,1)/e(3,2)/,l1,g/u(2,2)/e(2,0)/
l2,d./lambda/,l-1,r/;/; k1:=k;/,l1,i?
begin
integer it,i0,k; real g,h,y,p,q;
array a(1:N),d(-4:3),u(1:N,1:4);
j:=i2:= if i1=vk then 0 else -1;
if N0>2 and DW(0)<>0 then begin
comment The pentadiagonal matrix of the uncoupled
state is reduced to tridiagonal form by succesive
Jacobi rotations, Swartz: Numer. Math. 12, 231 (1968),
modified by replacing a(i,j) and b by v(i+j,j) and p;
real c,s,c2,s2,cs,u,u1;
array v(1:N0,0:2);
for i:=1 step 1 until N0 do begin
j:=j+2;
for k:=0,1,2 do v(i,k):=e(j,k+k)
end;
comment v(1,1):=v(1,2):=v(2,2):=0;
for k:=1 step 1 until N0-2 do begin
for j:=k+2 step 2 until N0 do begin
if j=k+2 then begin
if v(k+2,2)=0 then goto endk;
p:=-v(k+1,1)/v(k+2,2);
end else begin
if g=0 then goto endk;
p:=-v(j-1,2)/g;
end;
s2:=1/(p*p+1); s:=sqrt(s2); c:=p*s;
c2:=c*c; cs:=c*s;
u:=c2*v(j-1,0)-2*cs*v(j,1)+s2*v(j,0);
u1:=s2*v(j-1,0)+2*cs*v(j,1)+c2*v(j,0);
v(j,1):=cs*(v(j-1,0)-v(j,0))+(c2-s2)*v(j,1);
v(j-1,0):=u; v(j,0):=u1;
u:=c*v(j-1,1)-s*v(j,2);
v(j,2):=s*v(j-1,1)+c*v(j,2);
v(j-1,1):=u;
if j<>k+2 then
v(j-1,2):=c*v(j-1,2)-s*g;
if j<N0 then begin
u:=c*v(j+1,2)-s*v(j+1,1);
v(j+1,1):=s*v(j+1,2)+c*v(j+1,1);
v(j+1,2):=u
end;
if j+2<=N0 then begin
g:=-s*v(j+2,2);
v(j+2,2):=c*v(j+2,2)
end end j;
endk: end k;
for i:=1 step 1 until N0 do begin
a(i):=v(i,0); b(i):=v(i,1) end
end else begin
for i:=1 step 1 until N0 do begin
j:=j+2; a(i):=e(j,0); b(i):=e(j,2) end
end;
b(1):= 0;
i0:=j:= if atype then nr else N0+1-nr;
h:=(if j>1 then abs b(j) else 0) +
(if j<N0 then abs b(j+1) else 0);
if j=1 or j=N0 then h:=h+h;
g:=a(j)+h; h:=a(j)-h;
for i:=2 step 1 until N0 do b(i):=b(i)*b(i);
for lambda:=(g+h)*0.5 while g<>lambda do begin
p:=0; q:=1; it:=0;
for i:=1 step 1 until N0 do begin
y:=(a(i)-lambda)*q - b(i)*p;
p:=q; q:=y;
if p>=0 == q>=0 then it:=it+1;
if it=nr then i:=N0
end;
if it=nr then h:=lambda else g:=lambda
end bisection;
dE0:=dE0+k1*lambda;
if Rot(7)=0 and couple and atype and -,oblat then begin
real procedure fac(m,n);
value m,n; integer m,n;
begin real f; integer i;
f:=1;
for i:=n+1 step 1 until m do f:=f*i;
fac:=f;
end fac;
k:= AUXMAT(type);
k2:= if k1=1 then k21 else k11;
if k2>0 then begin
g:=H(0)*3-G(0)/2; y:=(-H(0)-G(0)/2)/g;
h:=fac(J0+k2,J0-k2)/((fac(k2-1,1)**2)*8**(k2-1))*g*y**k2;
p:= k2*Rot(8); p:= p*p;
p:= p/(sqrt(p+h*h/4)+h/2);
lambda:= lambda+(if k=1 or k=4 then p else -p);
end end;
i0:=i2+i0+i0; g:=e(i0,0);
for i:=1,2,3,4 do begin
d(-i):= if i0-i>0 then e(i0,i) else 0;
d(i-1):= if i0+i<=N then e(i0+i,i) else 0
end i;
for i:=i0+1 step 1 until N do
for j:=0 step 1 until 4 do
e(i-1,j):= if j<i-i0 then e(i,j) else
if j<4 then e(i,j+1) else 0;
it:=0; N:=N-1; y:=lambda;
repeat:
for i:=N step -1 until 1 do b(i):=0;
for i:=-4 step 1 until 3 do
if d(i)<>0 then b(i0+i):=-d(i);
for i:=N step -1 until 1 do begin
for j:=0,j+1 while i-j>0 and j<=4 do begin
p:=e(i,j); k:=i;
for k:=k+1 while k<=N and k-i+j<=4 do
p:=p-a(k)*u(k,k-i)*u(k,k-i+j);
if j=0 then a(i):=p-lambda
else u(i,j):=p/a(i)
end j;
p:=b(i); k:=i;
for k:=k+1 while k<=N and k-i<=4 do
p:=p-u(k,k-i)*b(k);
b(i):=p
end i;
q:=1;
for i:=1 step 1 until N do begin
p:=if b(i)=0 then 0 else b(i)/a(i); k:=i;
for k:=k-1 while k>0 and i-k<=4 do
p:=p-u(i,i-k)*b(k);
b(i):=p; q:=q+p*p
end i;
if N>0 then begin
h:=g-lambda;
for i:=-4 step 1 until 3 do
if d(i)<>0 then h:=h+d(i)*b(i0+i);
h:=h/q;
if it<2 or (abs h<abs y and lambda+h<>lambda) then begin
lambda:=lambda+h; it:=it+1; y:=h; goto repeat
end
end;
q:=1/sqrt(q);
for i:=N step -1 until i0 do b(i+1):=b(i)*q;
for i:=i0-1 step -1 until 1 do b(i):=b(i)*q;
b(i0):=q; N:=N+1
end;
?
l./u(nr,i)/,r/u(nr,i)/b(i)/
l./u(nr,1)/,g/u(nr,/b(/
l./p:=ai(8/,r/p:=/p:=Li-dE-dE0;
/,d,f
i gtxt
;goasm2
;gosav time.300 lines.5000
gtxt=set 50
permanent gtxt.15
gtxt=edit algasmixx c.50
l1,r/91/110/,
l2,r/no/yes/,
l./Rot/,r/9/10/,l./MATRIX/,r/;/, AUXMAT(1:8);/
l./if oblat/,l3,i/
for i:=1 step 1 until 8 do
AUXMAT(i):= case i of (1,2,3,4,2,1,4,3);
/,l./couple/,r/; /;
/,r/;/ or Rot(10)<>0;/,l./type coup/,l1,r/9/9,10/,r/_ddd_d/dd/,
l./integer line/,r/J0/J0,N0/
l1,r/dE/dE,dE0,dP3/,l./goto nylinie/,
l3,r/d/dE0:=dP3:=d/
l./nr:=/,g2?//2?//2+1?
l./nr:=(J0+j)/,r/nr/N0/,r/-nr//
l./array u/,r/u(1:N,1:N)/e(1:N,0:4)/,r/ev/b/,l1,d2
l./u(i,i)/,r/u(i,i)/e(i,0)/,r/;/; e(i,3):= 0;/
l4,r/u(j,i)/e(j,1)/
l5,r/u(j,i)/e(j,2)/
l3,r/u(i,i-4)/e(i,4)/,l4,g/u(2,2)/e(2,0)/
l3,g/u(4,2)/e(4,2)/,l1,g/u(3,3)/e(3,0)/
l3,g/u(1,1)/e(1,0)/,l2,g/u(3,1)/e(3,2)/,l1,g/u(2,2)/e(2,0)/
l2,d./lambda/,l-1,r/;/; k1:=k;/,l1,i?
begin
integer it,i0,k; real g,h,y,p,q;
array a(1:N),d(-4:3),u(1:N,1:4);
j:=i2:= if i1=vk then 0 else -1;
if N0>2 and DW(0)<>0 then begin
comment The pentadiagonal matrix of the uncoupled
state is reduced to tridiagonal form by succesive
Jacobi rotations, Swartz: Numer. Math. 12, 231 (1968),
modified by replacing a(i,j) and b by v(i+j,j) and p;
real c,s,c2,s2,cs,u,u1;
array v(1:N0,0:2);
for i:=1 step 1 until N0 do begin
j:=j+2;
for k:=0,1,2 do v(i,k):=e(j,k+k)
end;
comment v(1,1):=v(1,2):=v(2,2):=0;
for k:=1 step 1 until N0-2 do begin
for j:=k+2 step 2 until N0 do begin
if j=k+2 then begin
if v(k+2,2)=0 then goto endk;
p:=-v(k+1,1)/v(k+2,2);
end else begin
if g=0 then goto endk;
p:=-v(j-1,2)/g;
end;
s2:=1/(p*p+1); s:=sqrt(s2); c:=p*s;
c2:=c*c; cs:=c*s;
u:=c2*v(j-1,0)-2*cs*v(j,1)+s2*v(j,0);
u1:=s2*v(j-1,0)+2*cs*v(j,1)+c2*v(j,0);
v(j,1):=cs*(v(j-1,0)-v(j,0))+(c2-s2)*v(j,1);
v(j-1,0):=u; v(j,0):=u1;
u:=c*v(j-1,1)-s*v(j,2);
v(j,2):=s*v(j-1,1)+c*v(j,2);
v(j-1,1):=u;
if j<>k+2 then
v(j-1,2):=c*v(j-1,2)-s*g;
if j<N0 then begin
u:=c*v(j+1,2)-s*v(j+1,1);
v(j+1,1):=s*v(j+1,2)+c*v(j+1,1);
v(j+1,2):=u
end;
if j+2<=N0 then begin
g:=-s*v(j+2,2);
v(j+2,2):=c*v(j+2,2)
end end j;
endk: end k;
for i:=1 step 1 until N0 do begin
a(i):=v(i,0); b(i):=v(i,1) end
end else begin
for i:=1 step 1 until N0 do begin
j:=j+2; a(i):=e(j,0); b(i):=e(j,2) end
end;
b(1):= 0;
i0:=j:= if atype then nr else N0+1-nr;
h:=(if j>1 then abs b(j) else 0) +
(if j<N0 then abs b(j+1) else 0);
if j=1 or j=N0 then h:=h+h;
g:=a(j)+h; h:=a(j)-h;
for i:=2 step 1 until N0 do b(i):=b(i)*b(i);
for lambda:=(g+h)*0.5 while g<>lambda do begin
p:=0; q:=1; it:=0;
for i:=1 step 1 until N0 do begin
y:=(a(i)-lambda)*q - b(i)*p;
p:=q; q:=y;
if p>=0 == q>=0 then it:=it+1;
if it=nr then i:=N0
end;
if it=nr then h:=lambda else g:=lambda
end bisection;
dE0:=dE0+k1*lambda;
if Rot(7)=0 and couple and atype and -,oblat then begin
real procedure fac(m,n);
value m,n; integer m,n;
begin real f; integer i;
f:=1;
for i:=n+1 step 1 until m do f:=f*i;
fac:=f;
end fac;
k:= AUXMAT(type);
k2:= if k1=1 then k21 else k11;
if k2>0 then begin
g:=H(0)*3-G(0)/2; y:=(-H(0)-G(0)/2)/g;
h:=fac(J0+k2,J0-k2)/((fac(k2-1,1)**2)*8**(k2-1))*g*y**k2;
h:= h/2; p:= k2*Rot(8); q:= k2**3*Rot(10);
k2:= if k=1 or k=4 then 1 else -1;
g:=p*p; y:= sqrt(g+h*h);
lambda:= lambda+g/(y+h)*k2; g:=p+q;
dP3:= dP3+(g+p)*q/(sqrt(g*g+h*h)+y)*k1*k2;
comment dP3 is the contribution from a perturbation G*Pa**3;
end end;
i0:=i2+i0+i0; g:=e(i0,0);
for i:=1,2,3,4 do begin
d(-i):= if i0-i>0 then e(i0,i) else 0;
d(i-1):= if i0+i<=N then e(i0+i,i) else 0
end i;
for i:=i0+1 step 1 until N do
for j:=0 step 1 until 4 do
e(i-1,j):= if j<i-i0 then e(i,j) else
if j<4 then e(i,j+1) else 0;
it:=0; N:=N-1; y:=lambda;
repeat:
for i:=N step -1 until 1 do b(i):=0;
for i:=-4 step 1 until 3 do
if d(i)<>0 then b(i0+i):=-d(i);
for i:=N step -1 until 1 do begin
for j:=0,j+1 while i-j>0 and j<=4 do begin
p:=e(i,j); k:=i;
for k:=k+1 while k<=N and k-i+j<=4 do
p:=p-a(k)*u(k,k-i)*u(k,k-i+j);
if j=0 then a(i):=p-lambda
else u(i,j):=p/a(i)
end j;
p:=b(i); k:=i;
for k:=k+1 while k<=N and k-i<=4 do
p:=p-u(k,k-i)*b(k);
b(i):=p
end i;
q:=1;
for i:=1 step 1 until N do begin
p:=if b(i)=0 then 0 else b(i)/a(i); k:=i;
for k:=k-1 while k>0 and i-k<=4 do
p:=p-u(i,i-k)*b(k);
b(i):=p; q:=q+p*p
end i;
if N>0 then begin
h:=g-lambda;
for i:=-4 step 1 until 3 do
if d(i)<>0 then h:=h+d(i)*b(i0+i);
h:=h/q;
if it<2 or (abs h<abs y and lambda+h<>lambda) then begin
lambda:=lambda+h; it:=it+1; y:=h; goto repeat
end
end;
q:=1/sqrt(q);
for i:=N step -1 until i0 do b(i+1):=b(i)*q;
for i:=i0-1 step -1 until 1 do b(i):=b(i)*q;
b(i0):=q; N:=N+1
end;
?
l./u(nr,i)/,r/u(nr,i)/b(i)/
l./u(nr,1)/,g/u(nr,/b(/
l./end k;/,l1,r/if/dE:= dE+dP3;
if/,l./p:=ai(8/,r/p:=/p:=Li-dE-dE0;
/,d,l./>,Li/,r/dE/dP3/,f
i gtxt
goasm3
;gosav time.900 lines.5000
gtxt=set 50
permanent gtxt.15
gtxt=edit algasmixx c.50
l1,r/91/110/,
l./MATRIX/,r/;/, AUXMAT(1:8);/
l./if oblat/,l3,i/
for i:=1 step 1 until 8 do
AUXMAT(i):= case i of (1,2,3,4,2,1,4,3);
/,l./integer line/,r/J0/J0,N0/
l1,r/dE/dE,dE0,dP3/,l./goto nylinie/,
l3,r/d/dE0:=dP3:=d/
l./nr:=/,g2?//2?//2+1?
l./nr:=(J0+j)/,r/nr/N0/,r/-nr//
l./array u/,r/u(1:N,1:N)/e(1:N,0:4)/,r/ev/b/,l1,d2
l./u(i,i)/,r/u(i,i)/e(i,0)/,r/;/; e(i,3):= 0;/
l4,r/u(j,i)/e(j,1)/
l5,r/u(j,i)/e(j,2)/
l3,r/u(i,i-4)/e(i,4)/,l4,g/u(2,2)/e(2,0)/
l3,g/u(4,2)/e(4,2)/,l1,g/u(3,3)/e(3,0)/
l3,g/u(1,1)/e(1,0)/,l2,g/u(3,1)/e(3,2)/,l1,g/u(2,2)/e(2,0)/
l2,d./lambda/,l-1,r/;/; k1:=k;/,l1,i?
begin
integer it,i0,k; real g,h,y,p,q;
array a(1:N),d(-4:3),u(1:N,1:4);
j:=i2:= if i1=vk then 0 else -1;
if N0>2 and DW(0)<>0 then begin
comment The pentadiagonal matrix of the uncoupled
state is reduced to tridiagonal form by succesive
Jacobi rotations, Swartz: Numer. Math. 12, 231 (1968),
modified by replacing a(i,j) and b by v(i+j,j) and p;
real c,s,c2,s2,cs,u,u1;
array v(1:N0,0:2);
for i:=1 step 1 until N0 do begin
j:=j+2;
for k:=0,1,2 do v(i,k):=e(j,k+k)
end;
comment v(1,1):=v(1,2):=v(2,2):=0;
for k:=1 step 1 until N0-2 do begin
for j:=k+2 step 2 until N0 do begin
if j=k+2 then begin
if v(k+2,2)=0 then goto endk;
p:=-v(k+1,1)/v(k+2,2);
end else begin
if g=0 then goto endk;
p:=-v(j-1,2)/g;
end;
s2:=1/(p*p+1); s:=sqrt(s2); c:=p*s;
c2:=c*c; cs:=c*s;
u:=c2*v(j-1,0)-2*cs*v(j,1)+s2*v(j,0);
u1:=s2*v(j-1,0)+2*cs*v(j,1)+c2*v(j,0);
v(j,1):=cs*(v(j-1,0)-v(j,0))+(c2-s2)*v(j,1);
v(j-1,0):=u; v(j,0):=u1;
u:=c*v(j-1,1)-s*v(j,2);
v(j,2):=s*v(j-1,1)+c*v(j,2);
v(j-1,1):=u;
if j<>k+2 then
v(j-1,2):=c*v(j-1,2)-s*g;
if j<N0 then begin
u:=c*v(j+1,2)-s*v(j+1,1);
v(j+1,1):=s*v(j+1,2)+c*v(j+1,1);
v(j+1,2):=u
end;
if j+2<=N0 then begin
g:=-s*v(j+2,2);
v(j+2,2):=c*v(j+2,2)
end end j;
endk: end k;
for i:=1 step 1 until N0 do begin
a(i):=v(i,0); b(i):=v(i,1) end
end else begin
for i:=1 step 1 until N0 do begin
j:=j+2; a(i):=e(j,0); b(i):=e(j,2) end
end;
b(1):= 0;
i0:=j:= if atype then nr else N0+1-nr;
h:=(if j>1 then abs b(j) else 0) +
(if j<N0 then abs b(j+1) else 0);
if j=1 or j=N0 then h:=h+h;
g:=a(j)+h; h:=a(j)-h;
for i:=2 step 1 until N0 do b(i):=b(i)*b(i);
for lambda:=(g+h)*0.5 while g<>lambda do begin
p:=0; q:=1; it:=0;
for i:=1 step 1 until N0 do begin
y:=(a(i)-lambda)*q - b(i)*p;
p:=q; q:=y;
if p>=0 == q>=0 then it:=it+1;
if it=nr then i:=N0
end;
if it=nr then h:=lambda else g:=lambda
end bisection;
dE0:=dE0+k1*lambda;
if Rot(7)=0 and couple and atype and -,oblat then begin
real procedure fac(m,n);
value m,n; integer m,n;
begin real f; integer i;
f:=1;
for i:=n+1 step 1 until m do f:=f*i;
fac:=f;
end fac;
k:= AUXMAT(type);
k2:= if k1=1 then k21 else k11;
if k2>0 then begin
g:=H(0)*3-G(0)/2; y:=(-H(0)-G(0)/2)/g;
h:=fac(J0+k2,J0-k2)/((fac(k2-1,1)**2)*8**(k2-1))*g*y**k2;
h:= h/2; p:= k2*Rot(8);
q:= p*k2*k2*(-7.01667'-3+k2*k2*1.47696'-5);
k2:= if k=1 or k=4 then 1 else -1;
g:=p*p; y:= sqrt(g+h*h);
lambda:= lambda+g/(y+h)*k2; g:=p+q;
dP3:= dP3+(g+p)*q/(sqrt(g*g+h*h)+y)*k1*k2;
comment dP3 is the contribution from a perturbation G*Pa**3;
end end;
i0:=i2+i0+i0; g:=e(i0,0);
for i:=1,2,3,4 do begin
d(-i):= if i0-i>0 then e(i0,i) else 0;
d(i-1):= if i0+i<=N then e(i0+i,i) else 0
end i;
for i:=i0+1 step 1 until N do
for j:=0 step 1 until 4 do
e(i-1,j):= if j<i-i0 then e(i,j) else
if j<4 then e(i,j+1) else 0;
it:=0; N:=N-1; y:=lambda;
repeat:
for i:=N step -1 until 1 do b(i):=0;
for i:=-4 step 1 until 3 do
if d(i)<>0 then b(i0+i):=-d(i);
for i:=N step -1 until 1 do begin
for j:=0,j+1 while i-j>0 and j<=4 do begin
p:=e(i,j); k:=i;
for k:=k+1 while k<=N and k-i+j<=4 do
p:=p-a(k)*u(k,k-i)*u(k,k-i+j);
if j=0 then a(i):=p-lambda
else u(i,j):=p/a(i)
end j;
p:=b(i); k:=i;
for k:=k+1 while k<=N and k-i<=4 do
p:=p-u(k,k-i)*b(k);
b(i):=p
end i;
q:=1;
for i:=1 step 1 until N do begin
p:=if b(i)=0 then 0 else b(i)/a(i); k:=i;
for k:=k-1 while k>0 and i-k<=4 do
p:=p-u(i,i-k)*b(k);
b(i):=p; q:=q+p*p
end i;
if N>0 then begin
h:=g-lambda;
for i:=-4 step 1 until 3 do
if d(i)<>0 then h:=h+d(i)*b(i0+i);
h:=h/q;
if it<2 or (abs h<abs y and lambda+h<>lambda) then begin
lambda:=lambda+h; it:=it+1; y:=h; goto repeat
end
end;
q:=1/sqrt(q);
for i:=N step -1 until i0 do b(i+1):=b(i)*q;
for i:=i0-1 step -1 until 1 do b(i):=b(i)*q;
b(i0):=q; N:=N+1
end;
?
l./u(nr,i)/,r/u(nr,i)/b(i)/
l./u(nr,1)/,g/u(nr,/b(/
l./end k;/,l1,r/if/dE:= dE+dP3;
if/,l./p:=ai(8/,r/p:=/p:=Li-dE-dE0;
/,d,f
i gtxt
;gosav time.900 lines.10000
asmixx
<Ethyl vinyl ether, g.s. (E - comp., s = 81.75)>
18111a 10
16307.064653 2816.942907 2478.088434
0 0 0 0 -0.114246 0
41 1
0.477893 -2.21924 36.997862 0.0821998 0.488354
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0 1a 34 7 27 33 8 26 2 22315.41
0 1a 34 7 27 33 8 25 3 22316.58
0 1a 34 7 28 33 8 26 3 22328.56
0 1a 34 7 28 33 8 25 2 22329.71
0 1a 32 7 25 31 8 24 2 33409.73
0 1a 32 7 25 31 8 23 3 33410.84
0 1a 32 7 26 31 8 24 3 33415.56
0 1a 32 7 26 31 8 23 2 33416.62
0 1a 31 7 24 30 8 23 2 38924.46
0 1a 31 7 24 30 8 22 3 38925.58
0 1a 31 7 25 30 8 23 3 38928.31
0 1a 31 7 25 30 8 22 2 38929.42
0 1a 36 8 28 35 9 27 2 39370.82
0 1a 36 8 28 35 9 26 3 39371.87
0 1a 36 8 29 35 9 27 3 39372.42
0 1a 36 8 29 35 9 26 2 39373.42
0 1a 37 8 29 36 9 28 2 33847.52
0 1a 37 8 29 36 9 27 3 33848.56
0 1a 37 8 30 36 9 28 3 33849.64
0 1a 37 8 30 36 9 27 2 33850.70
0 1a 39 8 31 38 9 30 2 22743.70
0 1a 39 8 31 38 9 29 3 22744.77
0 1a 39 8 32 38 9 30 3 22748.04
0 1a 39 8 32 38 9 29 2 22749.11
0 1a 44 9 35 43 10 34 2 23172.96
0 1a 44 9 36 43 10 34 3 23174.65
0 1a 44 9 36 43 10 33 2 23175.63
0 0 30 8 23 30 8 22 1 1.115
0 0 31 7 25 31 7 24 1 3.845
0 0 31 8 24 31 8 23 1 1.085
0 0 32 7 26 32 7 25 1 5.805
0 0 33 8 26 33 8 25 1 1.16
0 0 34 7 28 34 7 27 1 13.14
0 0 35 9 27 35 9 26 1 1.00
0 0 36 8 29 36 8 28 1 1.55
0 0 36 9 28 36 9 27 1 1.06
0 0 37 8 30 37 8 29 1 2.14
0 0 38 9 30 38 9 29 1 1.07
0 0 39 8 32 39 8 31 1 4.34
0 0 43 10 34 43 10 33 1 0.98
0 0 44 9 36 44 9 35 1 1.69
0 1a 44 9 35 43 10 33 3 0
-1
;
goasmtest
;kemlab5 1 time.300
gtxt2=set 50
permanent gtxt2.15
gtxt2=edit gtxt
l./goto nylinie/,r/goto nylinie/j:=j; s:=0/
l./d(-4:3)/,l1,i/
procedure writemat(res,e,n0,n,k);
value n0,n,k; integer n0,n,k; array e; zone res;
begin
real a; integer i,j;
for i:=1 step 1 until n do begin
write(res,<:<10>:>);
for j:=0,j+1 while j<i and j<=k do begin a:=e(n0+i,j);
write(res,if abs(a)<'6 then << -dddddd.ddd>
else << -d.dddddd'd>,a);
end end;
write(res,<:<10>:>);
end;
writemat(res,e,0,N,4);
/,l./repeat1/,i/
writemat(res,u,N0,N0,2);
/,l./q:=1;/,i/
write(out,<:<10>:>,<<ddddddd.ddd>,lambda,<< -d.ddddd'-d>,y,<:<10>:>);
for i:=1 step 1 until N0 do begin
for j:=0 step 1 until 3 do begin
q:=if j=0 then a(i) else if j=3 then b(i) else u(i,j);
if j>=i and j<3 then write(out,<: :>) else
write(out,if abs q<'6 then << -dddddd.dd>
else << -d.ddddd'd>,q);
end;
write(out,<:<10>:>);
end;
setposition(out,0,0);
/,l./i2+i0+i0/,i/
s:=s+k1*lambda;
/,l./repeat2/,i/
writemat(res,e,0,N,4);
/,l./q:=1;/,i/
write(out,<:<10>:>,<<ddddddd.ddd>,lambda,<< -d.ddddd'-d>,y,<:<10>:>);
for i:=1 step 1 until N do begin
for j:=0 step 1 until 5 do begin
q:=if j=0 then a(i) else if j=5 then b(i) else u(i,j);
if j>=i and j<5 then write(out,<: :>) else
write(out,if abs q<'6 then << -dddddd.dd>
else << -d.dddd'dd>,q);
end;
write(out,<:<10>:>);
end;
setposition(out,0,0);
/,l./>,Li/,r/d d/ddd/,r/Li/Li,<: :>,s);
/,d,f
i gtxt2
▶EOF◀