|
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: 5376 (0x1500) Types: TextFile Names: »rydiagpr«
└─⟦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⟧
<* rydiagpr calculation of diagonal matrixelements *> procedure rydiag(bsname,parterm); integer array parterm; array bsname; if chargesegdes(13)<0 and diag then begin integer i,k,sq,ngr,em,ll1,lc,lastsegm,coresold; real f0,f1,f2,f3,f4,df,del,del12,x,h,j,r2,eta, fak,ov,ovl,jint,iint,id,g,jd,Ep,Ek,Vc,Ve,grovl,ns2, cut; algol list.off copy.statevar; array pot(1:imax),pc,grf(1:if extype>0 then imax else 1), pe(1:if extype >1 then imax else 1),bsdianame(1:3); integer array diagval(1:(chargestate(6)+1)*diarecsize//2); array field dia; prno:=6; first:=true; keystat:=survey:=false; if diagkey then begin write(out,"nl",2,<:segment description record:>); writerec(out,segdes,0,0,segdesrecsize); end; initrydfile(bsname(1) shift 24,real <:dia:>,segdes.diasize,false); for i:=1,2 do bsdianame(i):=segdes.dianame(i); if -,diagexact then begin if extype=2 then fak:=1.5 else if extype=3 or (extype>=10 and extype <=110) then fak:=1 else if extype>=1000 then fak:=(extype-1000)/1000; etam:=0; if S=2 then fak:=-fak; for k:=1,2,3,4 do case k of begin henta(ryp,6*psegm,pot,psegm); if extype>0 then henta(ryp,psegm,grf,psegm); if extype>0 then henta(ryp,3*psegm,pc,psegm); if extype>1 then henta(ryp,4*psegm,pe,psegm); end; end; algol list.off copy.stateloop; if cores=0 then coresold:=0; ll1:=l*(l+1)//4; ncur:=n; lcur:=l; jcur:=J; setrydwhere(<:rydiag:>,n,l,0,0); operator(false); cpu:=systime(1,0,time); if diagexact then nstar:=n else begin if extype >=10 and extype <=110 then henta(ryexp,state*psegm,pe,psegm); computed:=getcomputed(states,state,cutcase,cut); end; if computed then begin array ryd(1:(if diagexact then 1 else (segm-1)*128)); chargesegdes(14):=-1; if -,diagexact then begin henta(ryf,(state+stateindex)*segm+1,ryd,segm-1); E:=(-Ip+Ecm)/Econv; r2:=h:=iint:=jint:=ovl:=Ep:=Ek:=Vc:=Ve:=grovl:=0; fak:=fak*(1.5/(arctan(1)**2))**(1/3); NE(-1):=0; icut:=cut/del0; f0:=f1:=f2:=ryd(NE(q-1)); f3:=ryd(NE(q-1)-1); for sq:=q-1 step -1 until 0 do begin del:=DE(sq); del12:=1/12/del; x:=B(sq+1); ngr:=NE(sq-1)+1; if ngr<1 then ngr:=1; f0:=f1; f1:=(f2+f1)/2; for k:=NE(sq) step -1 until ngr do begin f4:=(if k>2 then ryd(k-2) else 0); g:=f2*del; ov:=f2*g; ovl:=ovl+ov; jd:=ov/x; jint:=jint+jd; if k>ngr and abs (k-icut)>3 then df:=(8*(f3-f1)+f0-f4)*del12 else if k>icut+2 and k=ngr and k>3 then df:=(8*(f3-f1)+f0-ryd(k-3))*del12 else df:=0; id:=g*df; iint:=iint+id; h:=h+ov*x; r2:=r2+ov*x*x; Ek:=Ek+df*df*del+ll1*jd/x; if k<=imax then begin Ep:=Ep+pot(k)*ov; if extype>0 then begin Vc:=Vc+pc(k)*ov; grovl:=grovl+ov*grf(k); if extype>1 then begin Ve:=Ve+ov*pe(k) end; end; end else Ep:=Ep-jd; f0:=f1; f1:=f2; f2:=f3; f3:=f4; x:=x-del; end; end; end else begin comment exact integrals; ns2:=nstar**2; Ep:=-1/ns2; E:=-1/2/ns2; Ek:=1/2/ns2; h:=1/2*(3*ns2-ll1); r2:=ns2/2*(5*ns2+1-3*ll1); jint:=1/ns2; iint:=2/ns2; end exactdiag; Ep:=Z*Ep; E:=Z*Z*E; Ek:=Z*Z*Ek; Vc:=Z*Vc; Ve:=Z*Ve; jint:=Z*jint; iint:=Z*iint; h:=h/Z; r2:=r2/Z/Z; eta:=-Ep/Ek; etam:=etam+eta; if diag then begin if first then begin page:=1; writepage(page,cores,parterm); head(r); if diagexact then write(out,"nl",1,<:exact values:>) else writeparam; write(out,"nl",1,<:expectation values:>); end; if first or cores<>coresold or (l<>lc and lin+series.ser(3)-series.ser(2)+2>maxlines) then begin if -,first then writepage(page,cores,parterm); write(out,"nl",2,"sp",if finestruct then 9 else 5, <:<1/r>:>); write(out,<:<df/dr>:>); write(out,"sp",5,<:<r>:>,"sp",4,<:<r**2>:>, "sp",4,<:E:>,"sp",6,<:2*Ek:>,"sp",5,<:Ep:>,"sp",2); if overl then write(out,<: overlap :>); if extype>0 then write(out,<:coulomb:>, "sp",3,if extype>1 then <:exchange :> else <: :>, <:<fg!fnl>:>,"sp",4,if extype>1 then <:eta :> else <: :>); if cput then write(out,<:cpu-time:>); if nuitr=0 and -,exact then write(out,<: cut:>); first:=false; lin:=lin+2; lc:=l; coresold:=cores; end sideoverskrift; write(out,"nl",if l<>lc then 2 else 1); writestate(out,L,n,l,J); write(out,<<-d.ddd>,"sp",1,jint,"sp",1,iint-jint, string layr,h, string layr2,r2,<<-dd.ddd>, "sp",1,E,"sp",1,Ek,"sp",1,Ep); if extype>0 then write(out,<< -d.dddddd>,Vc); if extype>1 then write(out,<< -d.dddddd>,fak*Ve); if overl then write(out,string laye,ovl); if extype>0 then write(out,<< -d.dddddd>,grovl); if extype>1 then write(out,<< -d.dddddd>,eta); if cput then write(out,<< -d.dd>,systime(1,time,time)-cpu); if nuitr=0 and -,exact then write(out,<<dd.ddd>,cut); lc:=l; lin:=lin+1; end writediagonal values; end computation ; dia:=(state+stateindex)*diarecsize; for i:=1 step 1 until 6 do diagval.dia(i):=case i of (jint,iint-jint,h,r2,Ek,Ep); end end end end stateloop; ncur:=0; comment if extype>=1000 then write(out,"nl",3,<:etamean = :>,<<-d.dddd>,etam/lexi(n,l)); lastsegm:=putstruct(bsdianame,diagval, 0,chargestate(6),diarecsize,chargesegdes(9)); end rydiagonal; ▶EOF◀