|
|
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: 13056 (0x3300)
Types: TextFile
Names: »rytranspr«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦e6c2bcfa6⟧ »cryprog«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦e6c2bcfa6⟧ »cryprog«
└─⟦this⟧
\f
<* rytrans calculation of offdiagonal matrixelements *>
<*
1979-02-12
*>
procedure rydip_in_parent(bsname,parterm);
array bsname;
integer array parterm;
if chargesegdes(13)<0 and (offdiag or lifetimes) then
begin comment local block for rydip_in_parent;
integer i,k,ngr,em,sq,n1c,trans,eqfak,icutf,tottrans,lastsegm,dl,
Lcore,coresold;
real dele,f0,f1,f2,f3,f4,df,del,x,h,hp,w,
fak,ov,ovl,jd,g,id,osc,A,Sl,lambda,has,sigma,F,
s1,iint,jint,dovl,dj,di,dh,dhp,
cutf,cut,ji,jf,gi,gf,slsmval,dpolint,polint;
boolean page1,plb;
array bsdipname(1:2);
algol list.on copy.statevar;
algol list.on copy.statevar2;
integer array field dipi;
array field dipf;
dl:=1; <*dipole allowed matrixelements*>
setrydwhere(<:rydipinp:>,0,0,0,0);
if offdiag then begin
page:=1;
writepage(page,0,parterm);
head(r); writeparam;
n1c:=0;
write(out,nl,2,<:dipole allowed transition matrixelements:>,nl,1);
lin:=lin+3;
end;
initrydfile(bsname(1) shift 24, real <:dip:>,segdes.dipsize,false);
for i:=1,2 do bsdipname(i):=segdes.dipname(i);
tottrans:=0;
keystat:=lookupentry(<:ryoffkey:>)=0;
offkey:=offkey or keystat;
page1:=true;
algol list.on copy.stateloop;
if cores=0 then coresold:=0;
computed:=getcomputed(states,state,cutcase,cut);
trans:=gettransno(states,state);
if offkey then write(out,nl,1,<:trans :>,trans);
if computed and trans>0 then
begin
array ry1,ry2(1:(segm-1)*128);
integer array dipval(1:(trans+1)*diprecsize//2);
cleararray(dipval);
ncur:=n; lcur:=l; jcur:=J;
if offkey then
begin
write(out,nl,1);
writestate(out,L,n,l,J);
write(out,<: n* :>,nstar);
end;
E:=(-Ip+Ecm)/Econv;
henta(ryf,(state+stateindex)*segm+1,ry1,segm-1);
dipf:=-diprecsize;
algol list.on copy.stateloop2;
if plb then henta(ryf,(state+stateindex)*segm+1,ry1,segm-1);
cpu:=systime(1,0,time);
cutf:=if cut>cut2 then cut else cut2;
if offkey then
begin
write(out,nl,1,star,1);
writestate(out,L,n,l,J);
write(out,sp,1);
writestate(out,L,n2,l2,J2);
write(out,<: cut :>,<< dd.d0>,cutf,cut,cut2);
end;
A:=osc:=Sl:=lambda:=0;
polint:=hp:=h:=iint:=jint:=ovl:=0;
if computed2 and n2>=n-njump and n2<=n+njump and
abs(l-l2)=2*dl and abs(J-J2)<=2 and abs(L-L2)<=2 then
begin
setrydwhere(<:rydipinp:>,n,l,n2,l2);
operator(false);
E2:=(-Ip+Ecm2)/Econv;
dele:=E2-E;
henta(ryf,(state2+stateindex2)*segm+1,ry2,segm-1);
fak:=(1.5/(arctan(1)**2))**(1/3);
em:=if dele>0 then l+1 else l2+1;
NE(-1):=0;
icut:=cut/del0;
icut2:=cut2/del0;
icutf:=cutf/del0;
f0:=f1:=f2:=ry2(NE(q-1));
f3:=ry2(NE(q-1)-1);
for sq:=q-1 step -1 until 0 do
begin
del:=DE(sq);
x:=B(sq+1);
ngr:=NE(sq-1)+1;
if ngr<1 then ngr:=1;
dpolint:=dovl:=dj:=di:=dh:=dhp:=0;
for k:=NE(sq) step -1 until ngr do
begin
f4:=if k>2 then ry2(k-2) else 0;
g:=if k>0 then ry1(k) else 0;
ov:=f2*g; dovl:=dovl+ov;
if hastighed then
begin
jd:=ov/x; dj:=dj+jd;
if k>ngr and abs(k-icut)>3 and abs (k-icut2)>3 then
df:=(8*(f3-f1)+f0-f4) else
if k>icut+2 and k=ngr and k>3 then df:=(8*(f3-f1)+f0-ry2(k-3))
else df:=0;
id:=g*df; di:=di+id;
end hastighed;
w:=ov*x;
dh:=dh+w; dhp:=dhp+abs w;
if polarisation then
begin
dpolint:=dpolint+w/(x*x+cutf*cutf)**2;
end polarisation;
if plb then begin
ry1(k):=w;
if hastighed then ry2(k):=(id+em*jd)/dele
end;
f0:=f1; f1:=f2; f2:=f3; f3:=f4;
x:=x-del;
end;
ovl:=ovl+dovl*del;
jint:=jint+dj*del;
iint:=iint+di/12;
h:=h+dh*del;
hp:=hp+dhp*del;
polint:=polint+dpolint*del;
end;
comment laye=8,laym=10,layr=8,layr2=10,layr3=15;
if (lin>=maxlines or page1 or cores<>coresold) and offdiag then
begin
if page1 then page1:=false else
begin
writepage(page,cores,parterm);
write(out,nl,1);
lin:=10;
end;
write(out,<:transition:>);
if finestruct then write(out,sp,10);
if dip and hastighed then write(out,sp,3,<:<p>/(E2-E1):>,sp,1);
if dip then write(out,sp,3,<:<r>:>,sp,6);
if polarisation then write(out,sp,4,<:alfa:>,sp,4);
if bandd or bandf then write(out,sp,8,<:F:>,sp,6) else
if sigma2 then write(out,sp,4,<:sigma**2:>,sp,2);
if dip then write(out,sp,1,<:A(n1,l1;n2,l2):>);
write(out,sp,5,<:E1-E2:>,sp,2);
if overl then write(out,sp,3,<:overlap:>,sp,1);
if cput then write(out,sp,1,<:cpu-time:>);
if canc then write(out,sp,5,<:<37>:>,sp,2);
coresold:=cores;
end sideoverskrift;
jint:=jint*Z; iint:=iint*Z;
h:=h/Z;
hp:=hp/Z;
has:=(iint+em*jint);
if bandd or bandf then F:=(if nstar2<l2//2+'-5 then 0 else
2*Z/3/nstar2/sqrt(nstar2**2-(l2//2)**2)*h);
sigma:=h*h/(l2*l2-1);
lambda:='8/Econv/dele;
if lambda>0 then begin
gi:=l+1; gf:=l2+1;
ji:=2*gi/(J+1); jf:=2*gf/(J2+1);
end else begin
gi:=l2+1; gf:=l+1;
ji:=2*gi/(J2+1); jf:=2*gf/(J+1);
end;
gi:=gi*(S+1);
gf:=gf*(S+1);
eqfak:=degenerate(cores,parterm,n,l);
s1:=eqfak*h**2/(l2*l2-1);
Lcore:=parterm.pardes(8);
Sl:=s1*SLSM(Lcore,l,L,l2,L2);
osc:=2/3*dele/gi*Sl;
comment Condon and Shortley p.245;
comment formula 61.2 Bethe and Salpeter;
A:=2/cau**3*dele**2*gi/gf*osc/t0sec*'-8;
A:=abs A;
osc:=abs osc;
if finestruct then begin
slsmval:=SLSM(S,l,J,l2,J2);
Sl:=Sl*slsmval;
osc:=osc*slsmval*ji;
A:=A*slsmval*jf;
end;
if offdiag then begin
write(out,nl,if n1c<>n then 2 else 1);
writestate(out,L,n,l,J);
write(out,sp,1);
writestate(out,L,n2,l2,J2);
if dip and hastighed then write(out,string layr3,has/(dele));
if dip then write(out,string layr3,h);
if polarisation then write(out,string layr3,polint);
if bandd or bandf then write(out,string layr3,F) else
if sigma2 then write(out,string layr3,sigma);
if dip then write(out,string layr3,A);
write(out,string laye,sp,4,E-E2);
if overl then write(out,string laye,sp,2,ovl);
if cput then write(out,<<-d.dd>,systime(1,time,time)-cpu);
if canc and dip then write(out,sp,2,<<ddd.dd>,abs h/hp*100);
if eqfak<>1 then write(out,sp,2,<:degen=:>,<<d>,eqfak);
lin:=lin+(if n1c<>n then 2 else 1);
n1c:=n;
end;
dipi:=dipf:=dipf+diprecsize;
dipval.dipi(1):=state+stateindex;
dipval.dipi(2):=state2+stateindex2;
for i:=diprecsize//4 step -1 until 2 do dipval.dipf(i):=
case i of(0.0,h,has,polint,abs h/hp*100,osc,A,Sl,lambda,0.0);
end computed2;
end end end state2loop;
lastsegm:=putstruct(bsdipname,dipval,tottrans,tottrans+trans-1,
diprecsize,chargesegdes(11));
tottrans:=tottrans+trans;
if offkey then
begin
write(out,nl,2,<:dipole record for :>);
writestate(out,L,n,l,J);
write(out,sp,4,<:trans :>,trans,sp,2,<:total trans :>,tottrans);
for i:=0 step 1 until trans-1 do writediprec(dipval,i);
write(out,nl,1,<:first segment :>,chargesegdes(11),
nl,1,<:last segment :>,lastsegm);
end offkey;
end computed;
end end end end stateloop;
chargesegdes(15):=-1;
end rydip_in_parent;
procedure ryquad(bsname,parterm);
array bsname;
integer array parterm;
if chargesegdes(13)<0 and quad and electrons=1 and -,finestruct then
begin comment local block for ryquad;
integer i,k,ngr,sq,n1c,trans,eqfak,icutf,tottrans,lastsegm,
dl,coresold;
real dele,f0,f1,f2,f3,f4,df,del,x,h,hp,w,r2,
ov,ovl,g,osc,A,Sl,lambda,
dovl,dh,dhp,dr2,
cutf,cut,ji,jf,gi,gf,slsmval;
boolean page1,plb;
array bsquadname(1:2);
algol list.on copy.statevar;
algol list.on copy.statevar2;
integer array field quadi;
array field quadf;
dl:=2;
setrydwhere(<:ryquadinp:>,0,0,0,0);
if offdiag then begin
page:=1;
writepage(page,0,parterm);
head(r); writeparam;
n1c:=0;
write(out,nl,2,<:quadropole transition matrixelements:>,nl,1);
lin:=lin+3;
end;
initrydfile(bsname(1) shift 24, real <:quad:>,100<*segdes.quadsize*>,false);
for i:=1,2 do bsquadname(i):=segdes.quadname(i);
tottrans:=0;
keystat:=lookupentry(<:ryoffkey:>)=0;
offkey:=offkey or keystat;
page1:=true;
algol list.on copy.stateloop;
if cores=0 then coresold:=0;
computed:=getcomputed(states,state,cutcase,cut);
trans:=gettransno(states,state);
if offkey then write(out,nl,1,<:trans :>,trans);
if computed and trans>0 then
begin
array ry1,ry2(1:(segm-1)*128);
integer array quadval(1:(trans+1)*quadrecsize//2);
cleararray(quadval);
ncur:=n; lcur:=l; jcur:=J;
if offkey then
begin
write(out,nl,1);
writestate(out,L,n,l,J);
write(out,<: n* :>,nstar);
end;
E:=(-Ip+Ecm)/Econv;
henta(ryf,(state+stateindex)*segm+1,ry1,segm-1);
quadf:=-quadrecsize;
algol list.on copy.stateloop2;
if plb then henta(ryf,(state+stateindex)*segm+1,ry1,segm-1);
cpu:=systime(1,0,time);
cutf:=if cut>cut2 then cut else cut2;
if offkey then
begin
write(out,nl,1,star,1);
writestate(out,L,n,l,J);
write(out,sp,1);
writestate(out,L,n2,l2,J2);
write(out,<: cut :>,<< dd.d0>,cutf,cut,cut2);
end;
A:=osc:=Sl:=lambda:=0;
hp:=r2:=h:=ovl:=0;
if computed2 and n2>=n-njump and n2<=n+njump and
((l>0 and l=l2) or abs(l-l2)=2*dl) and abs(J-J2)<=2 and abs(L-L2)<=2 then
begin
setrydwhere(<:ryquadinp:>,n,l,n2,l2);
operator(false);
E2:=(-Ip+Ecm2)/Econv;
dele:=E2-E;
henta(ryf,(state2+stateindex2)*segm+1,ry2,segm-1);
NE(-1):=0;
icut:=cut/del0;
icut2:=cut2/del0;
icutf:=cutf/del0;
f0:=f1:=f2:=ry2(NE(q-1));
f3:=ry2(NE(q-1)-1);
for sq:=q-1 step -1 until 0 do
begin
del:=DE(sq);
x:=B(sq+1);
ngr:=NE(sq-1)+1;
if ngr<1 then ngr:=1;
dovl:=dh:=dhp:=dr2:=0;
for k:=NE(sq) step -1 until ngr do
begin
f4:=if k>2 then ry2(k-2) else 0;
g:=if k>0 then ry1(k) else 0;
ov:=f2*g; dovl:=dovl+ov;
w:=ov*x;
dh:=dh+w;
w:=w*x;
dhp:=dhp+abs w;
dr2:=dr2+w;
f0:=f1; f1:=f2; f2:=f3; f3:=f4;
x:=x-del;
end;
ovl:=ovl+dovl*del;
jint:=jint+dj*del;
iint:=iint+di/12;
h:=h+dh*del;
hp:=hp+dhp*del;
r2:=r2+dr2*del;
end;
comment laye=8,laym=10,layr=8,layr2=10,layr3=15;
if (lin>=maxlines or page1 or cores<>coresold) and offdiag then
begin
if page1 then page1:=false else
begin
writepage(page,cores,parterm);
write(out,nl,1);
lin:=10;
end;
write(out,<:transition:>);
if finestruct then write(out,sp,10);
write(out,sp,3,<:<r>:>,sp,6);
write(out,sp,1,<:A(n1,l1;n2,l2):>);
write(out,sp,5,<:P1*P2:>,sp,5);
write(out,sp,5,<:E1-E2:>,sp,2);
write(out,sp,4,<:P1*r*r*P2:>,sp,3);
if overl then write(out,sp,3,<:overlap:>,sp,1);
if cput then write(out,sp,1,<:cpu-time:>);
if canc then write(out,sp,5,<:<37>:>,sp,2);
coresold:=cores;
end sideoverskrift;
h:=h/Z; r2:=r2/Z/Z;
hp:=hp/Z/Z;
lambda:='8/Econv/dele;
if lambda>0 then begin
gi:=l+1; gf:=l2+1;
ji:=2*gi/(J+1); jf:=2*gf/(J2+1);
end else begin
gi:=l2+1; gf:=l+1;
ji:=2*gi/(J2+1); jf:=2*gf/(J+1);
end;
gi:=gi*(S+1);
gf:=gf*(S+1);
eqfak:=degenerate(cores,parterm,n,l);
Sl:=r2*r2/(if l=l2 then 4*((l2-1)*(l2+3))**2 else
if l2=l+4 then 8*(l2-2)*(l2-2)*(l2+1)*(l2-3) else 0;
A:=(cau*dele)**5/gf/10/t0sec*'-8;
comment Condon and Shortley p.255;
A:=abs A;
osc:=abs osc;
if finestruct then begin
slsmval:=SLSM(S,l,J,l2,J2)/2;
Sl:=Sl*slsmval;
osc:=osc*slsmval*ji;
A:=A*slsmval*jf;
end;
if offdiag then begin
write(out,nl,if n1c<>n then 2 else 1);
writestate(out,L,n,l,J);
write(out,sp,1);
writestate(out,L,n2,l2,J2);
write(out,string layr3,h);
write(out,string layr3,A);
write(out,string laye,sp,4,E-E2);
write(out,string layr3,r2);
if overl then write(out,string laye,sp,2,ovl);
if cput then write(out,<<-d.dd>,systime(1,time,time)-cpu);
if canc then write(out,sp,2,<<ddd.dd>,abs h/hp*100);
if eqfak<>1 then write(out,sp,2,<:degen=:>,<<d>,eqfak);
lin:=lin+(if n1c<>n then 2 else 1);
n1c:=n;
end;
quadi:=quadf:=quadf+quadrecsize;
quadval.quadi(1):=state+stateindex;
quadval.quadi(2):=state2+stateindex2;
for i:=quadrecsize//4 step -1 until 2 do quadval.quadf(i):=
case i of(0.0,h,has,r2,abs h/hp*100,osc,A,Sl,lambda,0.0);
end computed2;
end end end state2loop;
lastsegm:=putstruct(bsquadname,quadval,tottrans,tottrans+trans-1,
quadrecsize,chargesegdes(18));
tottrans:=tottrans+trans;
if offkey then
begin
write(out,nl,2,<:quadole record for :>);
writestate(out,L,n,l,J);
write(out,sp,4,<:trans :>,trans,sp,2,<:total trans :>,tottrans);
for i:=0 step 1 until trans-1 do writequadrec(quadvais counted under the first parameter.
*nl*
fpnr points to the current parameter and is intended for use by
the sequential procedures "readifpnext" and "readsfpnext".
*ps0*
*ct*
Alphabetic list of procedures
*ta 30,30,30,30*
boolean procedure connectinp
boolean procedure connect_ls_o
boolean procedure initfp
boolean procedure readbfp
boolean procedure readifp
boolean procedure readifpnext
boolean procedure readinfp
boolean procedure readlsfp
boolean procedure readrfp
boolean procedure readsfp
boolean procedure readsfpnext
boolean procedure takefpitem
*ps0*
*ct*
References
*sj*
\f
ref. 1.
H. Rischel and T.A. Aris
System 3 Utility Programs Part one
RCSL 31-D364
Regnecentralen
Copenhagen 1975
ref. 2.
H. Dinsen Hansen (Ed.)
Algol 6, Users Manual
RCSL 31-D