|
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: 9984 (0x2700) Types: TextFile Names: »rycomp«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦this⟧ »cryprog/rycomp« └─⟦this⟧ »rycomp« └─⟦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⟧
procedure param(s,q1,d); <* rycomp computation of wawefunction *> value s,q1,d; integer s,q1,d; begin integer n,sq; dne:=d*128; q:=q1; start:=s; DE(0):=del0; if cut<del0 then cut:=del0; NE(-1):=0; imax:=NE(0):=s*128; psegm:=s; for i:=1 step 1 until qmax do NE(i):=NE(i-1)+dne; for i:=1 step 1 until qmax+1 do begin DE(i):=DE(i-1)*2; B(i):=B(i-1)+(NE(i-1)-NE(i-2))*DE(i-1); end; if coresize<30000 then begin sq:=-1; for sq:=sq+1 while NE(sq-1)<1600 and sq<=qmax+1 do; if coresize<24000 then sq:=sq-1; if sq<=q then q:=sq-1; end; if -,bscheckonly then begin n:=entier(sqrt(B(q+1))*4/7); comment if n<nsmax then nsmax:=n; end adjust nsmax; elem:=NE(q-1); segm:=(elem//128)+2; end param; procedure initry; begin integer i,j; real fak,firt,drecip; array ud(1:psegm*128); for i:=1,2,3,4,5 do begin drecip:=1/del0; case i of begin begin comment 2*r*exp(-r) ,H 1s; fak:=2*del0; for j:=imax step -1 until 1 do ud(j):=fak*j*exp(-del0*j); end; begin comment sqrt(32)*r*exp(-2*r), He 1s; fak:=sqrt(32)*del0; for j:=imax step -1 until 1 do ud(j):=fak*j*exp(-2*del0*j); end; begin comment 1/r potential; for j:=imax step -1 until 1 do ud(j):=-drecip/j; end; begin comment 1/r-(2+1/r)*exp(-r/4); for j:=imax step -1 until 1 do ud(j):=drecip/j-(2+drecip/j)*exp(-.1*j); end; begin comment (24/pi**2)**(1/3)*exp(-4/3*r); fak:=(1.5/(arctan(1)**2))**(1/3); firt:=4/3*del0; for j:=imax step -1 until 1 do ud(j):=fak*exp(-firt*j); end; end case loop; gema(ryp,(i-1)*psegm,ud,psegm); end calculate potential; end initry; procedure writepage(page,parentno,parterm); integer page,parentno; integer array parterm; begin write(out,"ff",1,"nl",1); pardes:=parentno*parentsize; S:=parterm.pardes(6); writeatsym(out,S,atno,Z); write(out,"sp",15); DATO; write(out,"sp",15,<:page:>,<< dd>,page,"nl",2); writecore(out,parentno,parterm); write(out,"nl",1,<:Ionisation potential :>,<< dd ddd ddd.ddd>, get_Ip(parentno,parterm)); page:=page+1; lin:=4; end; procedure writearray(a,sq,head,S,atno,Z,L,n,l,J); value S,atno,Z,L,n,l,J,sq; integer S,atno,Z,L,n,l,J,sq; string head; array a; if testtape then begin integer i,j,nmax,bytes,segm; real x,del; boolean bs; connectcuri(<:rytape:>); lookuptail(<:rytape:>,ttail); bs:=ttail(1)>0; if bs then setposition(in,0,ttail(6)) else setposition(in,ttail(7),0); outrec(in,8); in(1):=S; in(2):=atno; in(3):=Z; in(4):=L; in(5):=n; in(6):=l; in(7):=J; NE(-1):=0; bytes:=8*4; for j:=0 step 1 until sq-1 do begin nmax:=NE(j); del:=DE(j); x:=B(j); for i:=NE(j-1)+1 step 1 until nmax do begin outrec(in,2); in(1):=x; in(2):=a(i); bytes:=bytes+2*4; x:=x+del; end; end; outrec(in,2); in(1):=in(2):=-1; bytes:=bytes+2*4; ttail(7):=ttail(7)+1; segm:=(bytes+510)//512; ttail(6):=ttail(6)+segm; ttail(9):=bytes-4*(2+8); ttail(10):=segm; changetail(<:rytape:>,ttail); if -,bs then setposition(in,ttail(7),0); unstackcuri; end procedure writearray; procedure head(r); integer r; begin page:=1; if r>0 then write(out,<:R = :>,<<-d.d0>,r/100); if extype<1000 then begin write(out,"nl",1); lin:=lin+1; end; if extype>0 and extype<1000 then write(out,"nl",1, case extype mod 10+1 of (<::>,<:Hartree:>,<:HFS (Slater) A=1.5:>, <:HFSK (Kohn and Sham) A=1:>, <:HFSG (Berrondo and Goshinski) determined from virial theorem:>), <: functions:>) else if extype>=1000 then write(out,"nl",1,<:Hartree-Fock free electron functions:>, "nl",1,<:A = :>, <<-d.dddd>,(extype-1000)/1000); if extype>=10 and extype <=100 then write(out,<: as 1.step in a SCF-procedure:>, "nl",1,<:iteration no = :>,<< -ddd>,scfc); comment if -,hipr then write(out,"nl",increase(lin),<:low presicion results:>); lin:=lin+1; end head; procedure writeparam; begin integer gp; write(out,"nl",1,<<d>,q,<: interval:>); if q>1 then write(out,<:s:>); for gp:=1 step 1 until q do write(out,"nl",1,<:from:>,<<-ddddd.d00>,B(gp-1), <: to:>,B(gp),<: ,steplength:>,<<-dd.d00>,DE(gp-1), <: ,points :>,<<ddddd>, NE(gp-1)-(if gp=1 then 0 else NE(gp-2))); write(out,"nl",1,<:independent variable rho=Z*r:>); write(out,"nl",1,<:total no of points :>,elem, <: , segments :>,segm); if nuitr=0 and -,exact and -,autcut then write(out,"nl",1,<:cut at :>,<<dd.d00>,cut,<: a.u.:>); if autcut then write(out,"nl",1,<:automatic cut:>); if exact then begin write(out,"nl",1,<:exact wawefunctions:>); lin:=lin+1; end; if rlfit then write(out,"nl",1,<:r**(l+1) fit inside cut:>); write(out,"nl",1); lin:=lin+q+9; end write param; \f procedure bery(bsname,R,parterm); value R; real R; integer array parterm; array bsname; begin real nyenergi,energi,guess,EH,nsc; integer gp,q1,l0,maxzero,i,ii,lold; integer array zeroes(1:nmax+12); algol list.off copy.statevar; procedure writeberyhead(heading); value heading; boolean heading; begin if heading then begin page:=1; writepage(page,cores,parterm); head(r); writeparam; if -,hipr then write(out,<:low precission:>,"nl",1); if efak<>1 then write(out,<:guessfactor :>,efak,"nl",1); if nuitr<>0 then write(out,"nl",1,<:numugerror :>,<<d'+ddd>,nuerror); end else writepage(page,cores,parterm); write(out,"nl",1,<:function:>,"sp",if finestruct then 4 else 2, <:energy:>,"sp",4); if nuitr<>0 then write(out,"sp",2,<:iterations:>); if bandd then write(out,<: n* :>) else if nuitr>0 then write(out,<::>) else if bsdata then write(out,<: n* :>) else if extype=0 then write(out,<: exsact energy:>) else write(out,<: quantumdefect:>); if -,bsdata then write(out,<: n*(computed) :>); if autcut then write(out,"sp",4,<:cut:>,"sp",12,<:zero:>); if cput then write(out,<: cpu-time:>); outendcur(10); first:=false; lin:=lin+4; end writeberyhead; prno:=1; lold:=-4; q1:=q; n:=l:=0; if nyR and (extype<10 or extype>1000) then lavpot(r,n,l//2); cores:=0; writeberyhead(true); l0:=0; maxzero:=0; cleararea(string inc(ryf)); survey:=true; keystat:=false; algol list.off copy.stateloop; ncur:=n; lcur:=l; jcur:=J; computed:=false; if extype>=10 and extype<=110 then lavpot(R,n,l); energi:=-.5/nstar/nstar; if n<nmin or n>nmax or l<lmin or l>lmax or nstar>nsmax then goto NEXT; if nstar<.5 then goto NLOW; cpu:=systime(1,0,time); if n<5 and q>4 then begin q1:=4; end else q1:=q; if nstar<l//2 and q1>2 then q1:=2; if nstar>1+sqrt(B(q)) then begin write(out,"nl",1,"sp",2); writestate(out,L,n,l,J); write(out,<: too high:>); goto NEXT; end; AGAIN: setrydwhere(<:bery:>,n,l,0,0); operator(false); if -,testoverfl then overflows:=0; guess:=energi*efak; if zerocut then NE(-2):=round (nstar+.499)-l//2-1 else if abs (round nstar-nstar)<'-5 then NE(-2):=entier nstar-l//2 else NE(-2):= entier nstar-l//2+1; begin comment block for computation; array ryd(1:elem+(if nuitr=0 then 0 else nunr)), hj(1:if exact then 1 else (segm-1)*128); system(3,ii,ryd); for i:=NE(q1-1) step 1 until ii do ryd(i):=0; for i:=1 step 1 until nmax do zeroes(i):=0; if exact then nyenergi:=exactwf(n,l//2,B,DE,NE,ryd) else if nuitr=0 then nyenergi:=nucut(q1,n,l//2,lold//2,J//2,energi, B,DE,NE,ryd,hj,nstar,zeroes,Z) else nyenergi:=numug(q1,n,l//2,lold//2,guess,n-l//2-1,B,DE,NE,ryd,hj,nuitr,Z); lold:=l; chargesegdes(13):=-1; writearray(ryd,q1,<:wawefunction:>,S,atno,Z,L,n,l,J); gema(ryf,(state+stateindex)*segm+1,ryd,segm-1); computed:=true; if NE(-2)>maxzero then maxzero:=NE(-2); end block for wawefunction; if nyenergi=0 then begin q1:=q1-1; if q1>0 then goto AGAIN; computed:=false; end else nsc:=sqrt(-.5/nyenergi); if nuitr<>0 then nstar:=nsc; cpu:=systime(1,time,time)-cpu; NLOW: zeroes(nmax+12):=NE(-2); putstruct(ryf,zeroes,0,0,2*(nmax+12),(state+stateindex)*segm); ENDBER: putcomputed(states,state,computed,NE(-3),cut); if nstar<.5 then goto NEXT; if l<>l0 then begin if lin+series.ser(3)-series.ser(2)+1>=maxlines then writeberyhead(false); lin:=lin+1; write(out,"nl",1); l0:=l; end; lin:=lin+1; writestate(out,L,n,l,J); write(out,string layr3,nyenergi*Z*Z); if NE(-1)>0 then write(out,<< -ddd>,NE(-1),"sp",5); if bandd then write(out,string layr3,nstar); if nuitr=0 then begin write(out,string layr3,if bsdata then nstar else if extype=0 then EH*Z*Z else n-nsc); if bsdata and nuitr>0 then write(out,string layr3,nsc); end; if autcut then write(out,<< dd.ddd>,"sp",1,cut, "sp",2,case NE(-3)+1 of(<:nocut :>, <:mincut :>,<:maxcut :>,<:divcut :>,<:zerocut:>, <:n*<l+1 :>,<:error :>,<:rhocut :>,<:exact :>), << bd>,NE(-2)); if cput then write(out,<< -dd.dd>,cpu); if -,computed then write(out,<: ** not computed:>); if overflows>0 then begin write(out,<: ** overflow :>,overflows); end; if guess>nuerror and nuitr>0 then write(out,<: **error :>,guess); outendcur(10); NEXT: end for state; putstruct(bsname,states,stateindex,stateno,statesize,chargesegdes(5)); end end end stateloop ncur:=0; if wrzero then begin page:=1; writepage(page,cores,parterm); head(r); writeparam; write(out,"nl",2,<:zeroes of wawefunctions:>); algol list.off copy.stateloop; write(out,"nl",1); lin:=lin+1; getstruct(ryf,zeroes,0,0,2*(nmax+12),(state+stateindex)*segm); write(out,"nl",1); writestate(out,L,n,l,J); ii:=zeroes(nmax+12); for i:=1 step 1 until ii do begin if i mod 5=0 then write(out,"nl",1,"sp",4); write(out,<<-ddd.dd>,rval(zeroes(i))); end zeroes; end end end end stateloop; end writezeroes; if autcut then cut:=del0; if orto then ryort(bsname,parterm); end beregn rydberg; algol list.off copy.ryortpr; ▶EOF◀