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

⟦96cfebf30⟧ TextFile

    Length: 13056 (0x3300)
    Types: TextFile
    Names: »rytranspr«

Derivation

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

TextFile

\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