|
|
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: 23040 (0x5a00)
Types: TextFile
Names: »rymain«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »rymain«
mode list.yes
aldx=lookup ryproc alutproc ryglobal statevar statevar2 stateloop stateloop2,
ionloop rydstruct rydseg coreproc rycomp rydiffint rydiagpr,
ryoffpr ryortpr
if ok.no
(
contract from.crypr ryproc alutproc ryglobal statevar statevar2,
stateloop stateloop2 ionloop rydstruct rydseg coreproc
contract from.cryprog ryortpr,
rycomp rydiffint rydiagpr ryoffpr
)
lookup rymain
(
lookup rydlist
if ok.yes
mode 15.yes
rydberg1=set 460 disc3
scope day rydberg1
(rydberg1=algol blocks.yes
if warning.yes
end)
mode list.no
finisb
)
rydberg1
1980-09-07
begin
comment copyright Anders Lindgård, 1968,1969,1970,1971,1972,1973,
1974,1975,1976,1977,1978,1979.
program for calculating rydberg functions and matrixelements,
;
integer i,k,res,q,qmax,
r,testmode,extype,scfc,scfitr,
start,prno,noex,str,ncur,lcur,
fp,segm,bstrans,segtrans,elem,maxlines,page,lin,
nfitmax,dne,imax,char,psegm,attbuf,
ownd,nunr,nuitr,njump,
coresize,areas,buffers,outcopies,tasknr,
Zfitmax,extendl,
jcur;
long totcpu,totreal;
real del,rew,R,plymin,etam,del0,stxb,stxe,stxs,
cpu,time,
laye,laym,layr,layr2,layr3,efak,nuerror,
cut,rC,psqdf,
rhomin,deltanl,dn,n0bd,dcut,maxcut;
boolean nyR,rlfit,first,ud,hipr,func,
zerocut,cput,dip,quad,diag,orto,offdiag,int1,
nuipol,nukey,diagkey,offkey,overl,hastighed,bsdata,
testtape,wrzero,fptrue,fpto,ostack,
nextfile,bandd,autcut,next,
bsdc,osc,sigma2,canc,
ritz,bscheckonly,bandf,task,linestrength,
diagexact,exact,randr1mcrit,r1mc,
testoverfl,spinorbit,polarisation;
array consol,term,bsarea,outfile,name,
ryf,ryp,peff,ryexp,FP(1:3),
B,DE(0:12+1);
integer array tail,ttail(1:10),NE(-3:12);
procedure inparam;
begin
integer chc,n,l,i,ii;
boolean found,first;
own boolean f;
procedure fpparam(no);
value no; integer no;
begin
integer syner;
if fptrue then fp:=readparam(FP) else
begin
syner:=0;
if f then repeatchar(in) else f:=true;
nextchar:
readchar(in,i);
if i=32 then goto nextchar;
fp:=0;
nFP:
if i=10 or i=25 then fp:=0 else
if i>47 and i<58 then fp:=fp+1 else
if i>96 and i<126 then fp:=fp+2 else
if i=46 or i=47 then begin
readchar(in,i);
fp:=2;
goto nFP;
end else fp:=5;
if fp=5 then
begin
syner:=syner+1;
write(out,"nl",1,<:syntax:>);
if syner>5 then goto ENDI;
end else
begin
repeatchar(in);
if fp=1 or fp=3 then
begin
read(in,i); FP(1):=i;
end;
if fp=2 or fp=4 then readstring(in,FP,1);
end;
end;
if fp>0 then begin
i:=1;
if chc>50 then chc:=write(out,<: ,:>,"nl",1);
case fp of begin
chc:=chc+write(out,"sp",1,<<d>,round FP(1));
begin
chc:=chc+write(out,"sp",if fpto then 0 else 1,string FP(increase(i)));
fpto:=false;
end;
chc:=chc+write(out,<:.:>,<<d>,round FP(1));
chc:=chc+write(out,<:.:>,string FP(increase(i)));
end;
end;
found:=fp<=0;
if no>0 and fp<>no and fp<5 then begin
goto lFP;
end;
end;
integer procedure readi;
begin fpparam(3); found:=true; readi:=FP(1); end;
procedure readr(val);
real val;
begin
real fak;
fak:=.1;
fpparam(3);
val:=FP(1);
rep:
fpparam(-1);
if fp<>3 then goto lFP;
found:=true;
if FP(1)=0 then begin
fak:=fak/10;
goto rep;
end;
val:=val+fak*FP(1)*10**(-entier(ln(FP(1))/ln(10)));
end;
boolean procedure ct(txt);
string txt;
begin
boolean b;
array text(1:10);
movestring(text,1,txt);
b:=ct:=if text(1) shift (-8)<>FP(1) shift (-8) then
false else true;
found:=found or b;
end;
boolean procedure readb;
begin
fpparam(4);
if FP(1)=real <:yes:> or FP(1)= real <:no:> then
readb:=FP(1)=real <:yes:> else goto lFP;
found:=true;
end;
first:=true;
chc:=1;
lrFP:
fpparam(-1);
lFP:
if fp<>0 then begin
if fp=-1 or (fp=2 and ct(<:out:>)) then begin
if ct(<:out:>) then fpparam(4);
found:=true;
for i:=1,2 do outfile(i):=FP(i);
fp:=lookuptail(outfile,tail);
if fp<>0 then begin
reservesegm(outfile,500);
end;
fp:=connectcuro(outfile);
unstackcuro;
if fp<>0 then begin
outerror(<:connect out:>,fp);
end else ostack:=true;
outendcur(10);
i:=1;
if tail(1) extract 12 =18 then
write(out,"nl",1,<:filecount = :>,tail(7));
write(out,"nl",1,string outfile(increase(i)),<: = :>);
end;
if fp=2 then begin
if ct(<:efactor:>) then readr(efak);
if ct(<:r:>) then begin
readr(R);
r:=100*R;
nyR:=true;
end;
if ct(<:testoverflow:>) then testoverfl:=readb;
if ct(<:nukey:>) then nukey:=readb;
if ct(<:diagkey:>) then diagkey:=readb;
if ct(<:offkey:>) then offkey:=readb;
if ct(<:int1:>) then int1:=readb;
if ct(<:elem0:>) then start:=readi;
if ct(<:elem:>) then dne:=128*readi;
if ct(<:intervals:>) then q:=readi;
if ct(<:presicion:>) then
begin
fpparam(4);
hipr:=-,ct(<:low:>);
system(1,if hipr then 0 else 1,tail);
end;
if ct(<:autcut:>) then autcut:=readb;
if ct(<:zerocut:>) then zerocut:=readb;
if ct(<:rhomin:>) then readr(rhomin);
if ct(<:cut:>) then
begin
readr(cut);
autcut:=false;
end;
if ct(<:dcut:>) then readr(dcut);
if ct(<:maxcut:>) then readr(maxcut);
if ct(<:function:>) then
begin
func:=readb;
if -,func then nyR:=false;
end;
if ct(<:diag:>) then diag:=readb;
if ct(<:orto:>) then orto:=readb;
if ct(<:offdiag:>) then offdiag:=readb;
if ct(<:nuerror:>) then
begin
fpparam(3);
nuerror:=10**(-FP(1));
end;
if ct(<:overlap:>) then overl:=readb;
if ct(<:dipole:>) then dip:=readb;
if ct(<:quadropole:>) then quad:=readb;
if ct(<:velocity:>) then hastighed:=readb;
if ct(<:sigma:>) then sigma2:=readb;
if ct(<:linestrength:>) then linestrength:=readb;
if ct(<:oscillatorstrength:>) then osc:=readb;
if ct(<:bandf:>) then bandf:=readb;
if ct(<:cancellation:>) then canc:=readb;
if ct(<:diagexact:>) then diagexact:=readb;
if ct(<:exact:>) then begin
exact:=readb;
end;
if ct(<:data:>) then
begin
fpparam(4);
bsdata:=true;
for i:=1,2 do bsarea(i):=FP(i);
found:=lookupentry(bsarea)=0;
if -,found then write(out,<:***not present:>);
nuitr:=0;
fpparam(4);
bsdc:=ct(<:check:>);
end;
if ct(<:ritz:>) then ritz:=readb;
if ct(<:zfitmax:>) then Zfitmax:=readi;
if ct(<:del:>) then readr(del0);
if ct(<:terminal:>) then begin
fpparam(4);
for i:=1,2 do term(i):=FP(i);
found:=lookupentry(term)=0;
end;
if ct(<:intp:>) then nuipol:=readb;
if ct(<:randr1mcrit:>) then randr1mcrit:=readb;
if ct(<:r1mcriterion:>) then r1mc:=readb;
if ct(<:scfiterations:>) then scfitr:=readi;
if ct(<:expotentials:>) then noex:=readi;
if ct(<:exchange:>) then extype:=readi;
if ct(<:hartree:>) then extype:=1;
if ct(<:hfs:>) then extype:=2;
if ct(<:hfsk:>) then extype:=3;
if ct(<:hfsg:>) then extype:=4;
if ct(<:exfirst:>) then readr(stxb);
if ct(<:exlast:>) then readr(stxe);
if ct(<:exstep:>) then readr(stxs);
if ct(<:singlet:>) then S:=0;
if ct(<:doublet:>) then S:=1;
if ct(<:triplet:>) then S:=2;
if ct(<:quartet:>) then S:=3;
if ct(<:pentet:>) then S:=4;
if ct(<:tasks:>) then task:=readb;
if ct(<:end:>) then begin
unstackcuro; unstackcuri;
goto ENDP;
end;
if ct(<:lines:>) then maxlines:=readi;
if ct(<:nunr:>) then nunr:=readi;
if ct(<:charge:>) then Z:=readi;
if ct(<:nuiterations:>) then nuitr:=readi;
if ct(<:rlfit:>) then rlfit:=readb;
if -,fptrue and ct(<:start:>) then
goto START;
if ct(<:writezero:>) then wrzero:=readb;
if ct(<:branch:>) then readb;
if ct(<:nextfile:>) then nextfile:=readb;
if ct(<:bandd:>) then bandd:=readb;
if ct(<:dnl:>) then begin
readr(deltanl);
fpparam(4);
if ct(<:m:>) then deltanl:=-deltanl;
end;
if ct(<:dn:>) then readr(dn);
if ct(<:n0bd:>) then readr(n0bd);
if ct(<:njump:>) then njump:=readi;
if ct(<:testmode:>) then
begin
for i:=1 step 1 until 24 do
testmode:=setbit(testmode,readi,1);
end;
if ct(<:where:>) then begin
write(out,"nl",1,<:task :>,tasknr);
if bsdata then begin
writeatsym(out,S,atno,Z);
if ncur>0 then writestate(out,0,ncur,lcur,jcur);
end;
write(out,"nl",1);
DATO;
write(out,"nl",1,<:called from :>,case prno+1 of (
<:init:>,<:bery:>,<:numug:>,<:nucut:>,
<:exactwf:>,<:ryort:>,<:rydiag:>,<:ryoff:>,
<::>,<:HFexchange:>));
write(out,"nl",1);
goto ENDI;
end;
end fp<>2;
if ct(<:nsmax:>) then readi;
if ct(<:nmax:>) then readi;
if ct(<:nmin:>) then readi;
if ct(<:lmin:>) then readi;
if ct(<:zmin:>) then readi; if ct(<:zmax:>) then readi;
if ct(<:zbrmax:>) then readi; if ct(<:extendl:>) then readi;
ct(<:bscheck:>);
ct(<:maxpl:>); ct(<:spinorbit:>);
ct(<:polarisat:>);
ct(<:survey:>);
ct(<:yes:>); ct(<:no:>);
if -,ct(<:next:>) then begin
if -,found then begin
if first and fp=2 then first:=false else
if fp<5 then
write(out,<:***param:>);
end not found;
goto lrFP end else next:=true;
end;
if -,next then f:=false;
if diagexact then bscheckonly:=true;
if bscheckonly or (diagexact ) then param(1,1,1) else
param(start,q,dne//128);
if nuitr<>0 then cut:=0;
if nextfile then begin
lookuptail(outfile,tail);
tail(7):=tail(7)+1;
changetail(outfile,tail);
end;
if extype>0 then osc:=hastighed:=true;
if -,bscheckonly then begin
ryåbn(peff,segm-1);
comment ryåbn(ryexp,psegm*maxstates);
ryåbn(ryp,psegm*7);
end;
if exact or autcut or cut>del0 then nuitr:=0;
if exact then autcut:=false;
ENDI:
if fptrue and ostack then
begin
fplist:=true;
connectcuro(outfile);
initfp;
end;
end inparam;
procedure connectprim;
begin
if doubleload(parent+4)=long <:b:> and
term(1)=real <:t30:> then begin
connectcuro(<:t30:>); connectcuri(<:t30:>);
end else begin
connectcuro(term); connectcuri(term);
end;
end;
procedure endprim;
begin
outendcur(12);
outendcur(25);
unstackcuro;
unstackcuri;
end;
procedure writestat;
begin
long tc,tr;
write(out,"ff",1,"nl",5,"sp",40);
DATO;
tc:=doubleload(owndescr+56);
tr:=doubleload(owndescr+64);
totcpu:=tc-totcpu;
totreal:=tr-totreal;
write(out,"nl",5,<:cputime used:>,"sp",10,
<< dd dd dd>,totcpu/10000,"nl",1,
<:real time used :>,"sp",7,totreal/10000,
"nl",1,<:cpu <37> :>,"sp",18,<< dd.dd>,totcpu/totreal*100,"nl",1,
<:segments transferred :>,<< ddd ddd>,segtrans,"nl",1,
<:backing store accessed:>,bstrans,"nl",1,
<:blocksread :>,blocksread,"nl",1,
<:end:>,if false then <:task:> else <:run:>,"nl",1);
outendcur(10);
totcpu:=tc;
totreal:=tr;
segtrans:=bstrans:=blocksread:=0;
writetasknr;
end writestat;
procedure outerror(txt,val);
value val; integer val;
string txt;
begin
connectprim;
write(out,"nl",1,<:**:>,txt);
if val>0 then write(out,val);
endprim;
end;
procedure setrydwhere(proc,n1,l1,n2,l2);
value n1,n2,l1,l2; integer n1,l1,n2,l2;
string proc;
begin
integer res;
array field nf;
nf:=2;
res:=lookuptail(<:rydwhere:>,tail);
if res<>0 then begin
cleararray(tail);
tail(1):=-1;
tail(6):=systime(7,0,0.0);
createentry(<:rydwhere:>,tail);
permentry(<:rydwhere:>,3);
setenbase(<:rydwhere:>,120,129);
end;
movestring(tail.nf,1,proc);
tail(7):=S+1;
tail(8):=atno shift 12+Z;
tail(9):=n1 shift 12+l1//2;
tail(10):=if n2>0 then n2 shift 12+l2//2 else 0;
res:=changetail(<:rydwhere:>,tail);
end setrydwhere;
procedure operator(wait);
value wait; boolean wait;
begin
<*
if wordload(attbuf+4)<6 or wait then begin
array consol(1:3);
integer field c;
waitanswer(attbuf,tail);
attbuf:=0;
if -,wait then begin
i:=tail(2);
generaten(consol);
cleararray(tail);
tail(1):=1 shift 23+8;
for c:=4,6,8,10 do tail.c:=wordload(i-2+c);
createentry(consol,tail);
connectcuro(consol);
connectcuri(consol);
fpto:=true;
fptrue:=false;
setposition(in,0,0);
inparam;
unstackcuri;
outendcur(25);
unstackcuro;
end nowait;
*>
end;
integer procedure henta(name,fsgm,a,sgm);
value fsgm;
integer fsgm,sgm;
array a,name;
begin integer i,rep,maxs;
integer array M,A(1:8);
rep:=0;
if description(name)=0 then ryåbn(name,fsgm+sgm);
maxs:=wordload(description(name)+18);
M(1):=3 shift 12;
M(2):=firstaddr(a);
M(3):=M(2)+sgm*512;
M(4):=fsgm;
more:
i:=waitanswer(sendmessage(name,M),A);
rep:=rep+1;
if (i<>1 or A(2)<>sgm*512) and rep<100 then goto more;
if i=1 and A(2)<>sgm*512 then alarm(A(2),"nl",1,<:bytes from bs :>,
string inc(name),
"nl",1,<:segment no = :>,fsgm,<:
no of segments = :>,sgm,<:
maxsegm = :>,maxs);
if i<>1 then alarm("nl",1,<:res from bs :>,
string inc(name),<: :>,i);
henta:=i;
bstrans:=bstrans+1;
segtrans:=segtrans+sgm;
end henta;
integer procedure gema(name,fsgm,a,sgm);
value fsgm;
integer fsgm,sgm;
array a,name;
begin
integer i,k,rep,maxs;
integer array M,A(1:8);
rep:=0;
REP:
i:=reserveproc(name,0);
if i=3 then begin
i:=careaproc(name);
if i=0 then goto REP;
end;
if i<>0 then outerror(<:device status:>,i);
maxs:=wordload(description(name)+18);
M(1):=5 shift 12;
M(2):=firstaddr(a);
M(3):=M(2)+512*sgm;
M(4):=fsgm;
more:
i:=waitanswer(sendmessage(name,M),A);
rep:=rep+1;
if (i<>1 or A(2)<>sgm*512) and rep<100 then goto more;
if i=1 and A(2)<>sgm*512 then alarm(A(2),<:<10>bytes to bs :>,
string inc(name),
<:<10>segment no = :>,fsgm,<:
no of segments = :>,sgm,<:
maxsegm = :>,maxs);
if i<>1 then alarm(<:<10>res to bs :>,string inc(name),
<: :>,i);
gema:=i;
bstrans:=bstrans+1;
segtrans:=segtrans+sgm;
releaseproc(name);
end gema;
boolean procedure ryåbn(name,segm);
value segm; integer segm;
array name;
begin
integer i,j;
if segm<=0 then alarm(<:segm :>,segm,
<: :>,string inc(name));
if description(name)<>0 then removeproc(name);
ryåbn:=false;
i:=lookuptail(name,tail);
if i=0 and tail(1)<segm then
begin
j:=tail(1);
tail(1):=segm;
i:=changetail(name,tail);
if i<>0 then alarm(<:***to few segments :>,string inc(name),
<:, requested :>,segm,<: original :>,j);
end
else
if i<>0 then
begin
removeentry(name);
i:=reservesegm(name,segm);
if i<>0 then
begin
if ostack then closeout;
alarm("nl",1,<:******free area less than :>,segm,
<: ,result = :>,i,<: :>,string inc(name));
end;
comment scopeday(name);
ryåbn:=true;
end;
i:=careaproc(name);
if i<>0 then alarm(<:***area claim :>,i,
<: :>,string inc(name));
end;
real procedure pnames(i);
value i; integer i;
pnames:=real (case i of(<:ryhyf:>,<:rygrf:>,<:rynuc:>,<:rygrc:>,
<:rysex:>,<:rycou:>,<:ryex:>,<:rypot:>));
procedure getandcalc(name);
array name;
begin
integer i,ii,iii,l0;
boolean ct;
long time;
algol list.off copy.statevar;
tasknr:=0;
ct:=bsdc;
if task then begin
i:=lookuptail(<:rytask:>,tail);
if i<>0 or (i<>0 and Zmin>1) then begin
removeentry(<:rytask:>);
cleararray(tail); tail(6):=Zmin;
i:=create_entry(<:rytask:>,tail);
i:=i+scopeuser(<:rytask:>);
if i<>0 then outerror(<:createtask:>,i);
end;
tasknr:=tail(6)-1;
end;
if survey then write(out,"nl",1,<:from Z= :>,Zmin,<: to :>,Zmax);
algol list.off copy.ionloop;
if Z>=Zmin and Z<=Zmax then
begin
page:=1;
if bsdc then
begin
writepage(page,0,parterm);
write(out,"nl",1,<:data read from :>,string inc(bsarea));
end;
time:=getclock//10000;
setrydwhere(<:readdata:>,0,0,0,0);
outcopies:=1;
if bscheckonly then else
if ryåbn(ryf,segm*maxstates) then
write(out,"nl",1,<:called from bsdata :>);
if bsdc then
begin
write(out,"nl",2,<:state:>,"sp",if finestruct then 8 else 3,
<:n*:>,"sp",8,<:defect:>,"sp",2);
if Ip>0 then write(out,"sp",9,<:cm-1:>);
outendcur(10);
lin:=lin+(if Ip>0 then 5 else 4)+3;
end;
if bsdc then begin
l:=l0:=0;
algol list.off copy.stateloop;
if l<>l0 then begin
if lin+3+series.ser(3)-series.ser(2)>=maxlines then begin
writepage(page,cores,parterm);
write(out,"nl",2,<:state:>,"sp",3,<:n*:>,"sp",8,<:defect:>,"sp",2);
if Ip>0 then write(out,"sp",9,<:cm-1:>);
lin:=lin+5;
end;
write(out,"nl",1);
l0:=l;
lin:=lin+1;
end;
lin:=lin+1;
writestate(out,L,n,l,J);
write(out,<< -dd.dddddd>,nstar,
<< -d.dddd>,n-nstar);
if Ip>0 then write(out,<< -dd ddd ddd.ddd>,Ecm);
if n>=nmin and n<=nmax and l>=lmin and l<=lmax and nstar<=nsmax then
write(out,"sp",2,"*",1);
write(out,"nl",1);
end end end end stateloop;
end bsdc;
<*
if spinorbit then
begin
real val;
for l:=if lmin=0 then 1 else lmin step 1 until lmax do
for n:=if nmin<l+1 then l+1 else nmin step 1 until nmax do
begin
jindex:=l+s-abs(l-s)+1;
val:=-.5*Z*Z(1/nstable(lexi(n,l),jindex)**2-1/nstable(lexi(n,l),jindex-1;
spinorbitint:=val;
end;
end;
*>
if diagexact then begin
imax:=1;
rydiag(bsname,parterm);
end;
if -,bscheckonly then
begin
if dcut=0 or autcut then begin
bery(bsname,0,parterm);
chargestate(13):=time shift (-24) extract 24;
chargestate(14):=time extract 24;
chargestate(15):=if nuitr=0 then -1 else 0;
chargestate(16):=1; <*dl*>
chargestate(17):=njump;
rydiag(bsname,parterm);
ryoff(bsname,parterm,1);
putstruct(bsname,chargestate,2*chargestates-2,2*chargestates-2,chargesize,1);
putstruct(bsname,chargesegdes,2*chargestates-1,2*chargestates-1,chargerecsize,1);
end else
for cut:=if cut>del0 then cut else del0,
dcut step dcut until maxcut do
begin
bery(bsname,0,parterm);
rydiag(bsname,parterm);
ryoff(bsname,parterm,1);
end;
end;
if task then begin
cleararray(tail);
tail(6):=tasknr;
changetail(<:rytask:>,tail);
end;
end end end ionloop;
if task then removeentry(<:rytask:>);
goto ENDP;
end Z inside limits;
end getandcalculate;
algol list.off copy.rydstruct;
algol list.off copy.rydseg;
algol copy.rycomp;
algol copy.rydiffint;
algol copy.rydiagpr;
algol copy.ryoffpr;
algol list.off copy.alutproc;
algol list.off copy.coreproc;
algol list.off copy.ryproc;
procedure writetasknr;
begin
connectprim;
write(out,"nl",1,<:task :>,tasknr,"sp",4);
if tasknr>0 and bsdata then begin
if atno<1 or atno>96 then write(out,"sp",1,"*",2,<: atomic symbol:>,atno) else
writeatsym(out,S,atno,Z);
end;
write(out,"sp",1);
DATO;
outendcur(25);
endprim;
tasknr:=tasknr+1;
end;
procedure DATO;
writedate(out,0.0);
\f
procedure HFex(n,l,state);
value n,l,state; integer n,l,state;
begin
integer ngr,øgr,p,k,i,lf,l1,d;
real del,fak,x,y,iy,a,b,c;
array func,ex,off,gr,IN(1:imax);
prno:=9;
henta(ryf,state*segm+1,func,psegm);
lf:=-1/(2*l+1);
l1:=l+1;
y:=0; øgr:=0;
b:=c:=0;
if l=0 then begin
for p:=1 step 1 until imax do
off(p):=-gr(p)/func(p);
end l=0;
for p:=1 step 1 until imax do
ex(p):=lf*gr(p)/func(p);
for k:=1 step 1 until q do begin
del:=DE(k-1);
ngr:=øgr+1;
øgr:=NE(k-1);
for i:=ngr step 1 until øgr do begin
y:=y+del;
if i<=imax then begin
func(i):=iy:=func(i)*gr(i)*del;
if l=0 then c:=c+iy;
end else
b:=b+iy/(y**l1);
end end;
a:=0;
y:=B(1);
IN(imax):=b;
for d:=imax-1 step -1 until 1 do begin
y:=y-del0; iy:=IN(d+1);
IN(d):=iy+func(d)/(y**l1);
IN(d+1):=(y+del0)**l*iy
end;
IN(1):=del0**l*iy;
for p:= 1 step 1 until imax do begin
x:=del0*p;
if l=0 then off(p):=off(p)*c;
iy:=func(i)*(x**l);
a:=a+iy;
ex(p):=ex(p)*(a*(x**(-l1))+IN(p));
end;
gema(ryp,5*psegm,off,psegm);
gema(ryexp,state*psegm,ex,psegm);
end of Hartree-Fock exchange postential;
algol list.off copy.ryglobal;
comment initialisation;
setrydwhere(<:initrydberg:>,0,0,0,0);
i:=wordload(owndescr+26);
areas:=i extract 12; buffers:=i shift (-12) extract 12;
coresize:=wordload(owndescr+24)-wordload(owndescr+22)-2;
write(out,"nl",1,<:areas :>,areas,"nl",1,<:buffers :>,buffers,
"nl",1,<:coresize :>,coresize,"nl",2);
outendcur(0);
r1mc:=randr1mcrit:=testoverfl:=rlfit:=false;
rhomin:=0;
maxlines:=66;
jcur:=0;
ncur:=lcur:=0;
readbfp(<:bscheck:>,bscheckonly,false);
readbfp(<:tasks:>,task,false);
qmax:=12;
q:=4;
start:=4;
dne:=256;
readbfp(<:polarisat:>,polarisation,false);
readbfp(<:spinorbit:>,spinorbit,false);
nfitmax:=25;
readifp(<:extendl:>,extendl,0);
if extendl<lmin then extendl:=lmin;
if extendl>lmax then extendl:=lmax;
rew:=0.0 shift (-12);
cleararray(term);
packtext(term,<:rydterm:>);
laye:=real <<-d.ddddd>;
laym:=real <<-dddd.dddd>;
layr:=real <<-ddd.ddd>;
layr2:=real <<-dddddd.dd>;
layr3:=real << -d.ddddd'+dd>;
nuerror:='-5;
stxb:=stxe:=stxs:=
dcut:=maxcut:=R:=B(0):=0;
cut:=del0:=.025;
njump:=10000;
ownd:=owndescr;
testmode:=extype:=
prno:=noex:=scfitr:=r:=0;
efak:=1;
testtape:=lookupentry(<:rytape:>)=0;
exact:=diagexact:=
next:=bandd:=overl:=
ritz:=overl:=autcut:=nextfile:=
bsdata:=hastighed:=nukey:=int1:=quad:=cput:=ostack:=
osc:=sigma2:=offkey:=diagkey:=
wrzero:=bandf:=zerocut:=false;
linestrength:=nyR:=hipr:=fpto:=fptrue:=
canc:=nuipol:=
dip:=func:=true;
n0bd:=1.25;
deltanl:=-0.5;
dn:=.25;
nunr:=8;
Zfitmax:=nuitr:=100;
tasknr:=outcopies:=noex:=1;
cleararray(ryf); cleararray(ryp);
cleararray(ryexp);
movestring(ryf,1,<:ryfunc:>);
movestring(ryp,1,<:rypotential:>);
movestring(peff,1,<:rypoteff:>);
movestring(ryexp,1,<:ryexchange:>);
cleararray(outfile);
for i:=1,2 do outfile(i):=real doubleload(console+2+4*i);
offdiag:=offdiag or polarisation;
totcpu:=doubleload(owndescr+56);
totreal:=doubleload(owndescr+64);
bstrans:=segtrans:=blocksread:=0;
write(out,"nl",1,<:min :>); writenl(out,nmin,lmin);
write(out,"sp",2,<:max :>); writenl(out,nmax,lmax);
write(out,"nl",2);
inparam;
write(out,"nl",1); writenl(out,nmin,lmin);
write(out,"sp",2); writenl(out,nmax,lmax);
write(out,"nl",2);
if -,bscheckonly then initry;
comment start of program;
NEXTJOB:
setrydwhere(<:initnextjob:>,0,0,0,0);
<*
if bandd then BatesandDamgård;
*>
readsfp(<:data:>,FP,<::>);
if bsdata then getandcalc(FP);
START:
lin:=0;
if stxs>0 then begin
stxb:=1000*stxb;
stxe:=1000*stxe+1000;
stxs:=1000*stxs;
for extype:=stxb+1000 step stxs until stxe do begin
nyR:=first:=true; <* bery(R,n1,n2,l1,l2); rydiag(n1,n2,l1,l2); *> end;
goto ENDP
end;
r:=100*R;
for extype:=extype step 1 until noex do begin
for scfc:=1 step 1 until scfitr do begin
connectprim;
write(out,"nl",1,<:iteration :>,scfc,<: extype :>,extype);
DATO;
endprim;
nyR:=first:=true;
<*
bery(R,n1,n2,l1,l2);
rydiag(n1,n2,l1,l2);
*>
extype:=extype+10;
end iteration;
extype:=extype mod 10;
end exchange loop;
ENDP:
writestat;
func:=true;
if next then begin
next:=false;
inparam;
goto NEXTJOB;
end;
write(out,<:end main program
:>);
removeentry(<:rydwhere:>);
if ostack then closeout;
end;
▶EOF◀