|
|
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: 18432 (0x4800)
Types: TextFile
Names: »rydiffint«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦this⟧ »rydiffint«
<* rydiffint solves the differential equation *>
<*81-01-13*>
real procedure fb2(fb1,l);
value fb1,l; real fb1; integer l;
fb2:=fb1*(2**(l+1));
real procedure ufb2(ufb1,energi,q,B,DE);
value ufb1,energi,q; real ufb1,energi;
integer q;
array B,DE;
ufb2:=ufb1*(if (1/B(q+1)+energi)>0 then 1 else
exp(DE(q)*sqrt(-2*(1/B(q+1)+energi))));
real procedure rval(i);
value i; integer i;
begin integer sq;
NE(-1):=0;
sq:=-1;
for sq:=sq+1 while i>NE(sq) do;
rval:=B(sq)+DE(sq)*(i-NE(sq-1));
end;
real procedure exactwf(n,l,B,DE,NE,ryd);
value n,l; integer n,l;
integer array NE;
array B,DE,ryd;
begin
real rho,drho;
integer i,imin,sq;
for sq:=q-1 step -1 until 0 do begin
imin:=NE(sq-1)+1;
if imin<1 then imin:=1;
drho:=DE(sq);
rho:=B(sq+1);
for i:=NE(sq) step -1 until imin do begin
comment ryd(i):=hydrogenwf(n,l,rho);
rho:=rho-drho;
end;
end;
exactwf:=-.5/n/n;
NE(-2):=n-l-1;
NE(-3):=8;
end;
real procedure renorm(f,DE,B,NE,q,r1m);
value q; integer q;
real r1m;
array f,DE,B;
integer array NE;
begin
integer sq,ngr,k;
real del,overlap,ovl,y,r,dr,y2,x,dr1m;
NE(-1):=0;
r1m:=r:=overlap:=0;
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;
dr1m:=dr:=ovl:=0;
for k:=NE(sq) step -1 until ngr do
begin
y:=f(k);
y2:=y*y;
ovl:=ovl+y2;
dr:=dr+x*y2;
dr1m:=dr1m+y2/x;
x:=x-del;
end;
r1m:=r1m+dr1m*del;
overlap:=overlap+ovl*del;
r:=r+dr*del;
end;
r1m:=r1m/overlap;
renorm:=r/overlap;
overlap:=1/sqrt(overlap);
for k:=NE(q-1) step -1 until ngr do f(k):=f(k)*overlap;
end renorm;
\f
procedure potential(energy,nuccharge,q,n,l,lold,NE,DE,hj,pot);
value energy,nuccharge,q,n,l,lold;
real energy,nuccharge; integer q,n,l,lold;
array DE,hj,pot;
integer array NE;
begin
own integer lq;
if l<>lold or q<>lq then begin
integer i,m,k,l2,nmin;
real x,xf,nucfak,xmin,xmax;
henta(ryp,6*psegm,pot,psegm);
l2:=l*(l+1);
NE(-1):=0;
nucfak:=2*nuccharge;
for m:=q-1 step -1 until 0 do
begin
nmin:=NE(m-1)+1;
del:=DE(m);
xf:=B(m+1);
for k:=NE(m) step -1 until nmin do
begin
hj(k):=l2/xf/xf+ (if k>imax then -nucfak/xf
else nucfak*pot(k));
xf:=xf-del;
end;
end effective potential calculation;
gema(peff,0,hj,segm-1);
lq:=q;
end else henta(peff,0,hj,segm-1);
end potential;
\f
procedure lavpot(r,n,l);
value r,n,l; real r; integer n,l;
begin
if extype>=10 and extype<=110 then <* HFex(n,l)*>;
begin
real fak;
integer pst;
array pot(1:imax);
henta(ryp,2*psegm,pot,psegm);
if extype<>0 then begin
array pc,pe(1:imax);
if extype<5 or extype>=1000 then begin
henta(ryp,3*psegm,pc,psegm);
henta(ryp,4*psegm,pe,psegm);
if extype=1 then begin
for pst:=imax step -1 until 1 do
pot(pst):=2*pot(pst)+pc(pst);
end else begin
if extype =2 then fak:=1.5 else
if extype =3 then fak:=1 else
if extype>=1000 then fak:=(extype-1000)/1000;
if S= 2 then fak:=-fak;
for pst:=imax step -1 until 1 do
pot(pst):=2*pot(pst)+pc(pst)+fak*pe(pst);
end;
end Slater-type potentials;
if extype>=10 and extype<=110 then begin
if S=0 then fak:=1 else
if S=2 then fak:=-1;
henta(ryp,4*psegm,pc,psegm);
comment henta(ryexp,(lexi(n,l)-1)*psegm,pe,psegm);
if l=0 then begin
array off(1:imax);
henta(ryp,5*psegm,off,psegm);
for pst:=imax step -1 until 1 do
pot(pst):=2*pot(pst)+pc(pst)+fak*pe(pst)+off(1);
end l=0 loop else begin
for pst:=imax step -1 until 1 do begin
pot(pst):=2*pot(pst)+pc(pst)+fak*pe(pst)
end for loop;
end l<>0 loop;
end extype<>0;
end Hartree-Fock potentials;
gema(ryp,6*psegm,pot,psegm);
end main;
end lavpot;
\f
real procedure numug(q,n,l,lold,engu,zp,B,DE,NE,f,p,maxitr,Z);
value q,n,l,lold,engu,zp,maxitr,Z; integer q,n,l,lold,zp,maxitr,Z;
real engu;
array B,DE,f,p;
integer array NE;
begin
comment version 6-8-73;
message numug;
boolean b1,b2;
real energy,delen,f1,f2,f3,y1,y2,y3,del,del2,scai,scau,
int,iint,uint,norm,yfit;
integer i,itr,sq,elem,p0,nr,errorp,ilimit,
up_lim;
prno:=2;
scai:=scau:=1;
delen:=0;
nr:=nunr; elem:=NE(q-1); NE(-1):=itr:=1;
potential(engu,1,q,n,l,lold,NE,DE,p,f);
cleararray(f);
f(1):=DE(0); f(elem+nr):=exp(-B(q));
if f(elem+nr)<'-100 then f(elem+nr):='-100;
for energy:=-2*engu,energy+delen while
(itr<2 or abs(delen)>nuerror*energy) and itr<=maxitr do
begin
comment udefra integration;
setrydwhere(<:numug:>,ncur,lcur,0,0);
operator(false);
sq:=q;
b1:=b2:=true;
uint:=0;
y1:=f(elem+nr):=abs(scau*f(elem+nr));
y2:=f(elem+nr-1):=ufb2(y1,-.5*energy,sq-1,B,DE);
up_lim:=(NE(q-1)+3*NE(q-2))//4;
repudefra:
i:=NE(sq-1);
del:=DE(sq-1);
del2:=del*del;
f1:=del2*(energy+p(i));
f2:=del2*(energy+p(i-1));
int:=0;
ilimit:=NE(sq-2)-1;
if sq=1 then ilimit:=.5/DE(0);
for i:=i-2,i-1 while (b1 or b2) and i>=ilimit do
begin
if b1 then begin
if y2<y1 and i<up_lim then
begin
b1:=false;
yfit:=y2/2;
end;
end else
if y2<yfit then b2:=false;
f3:=del2*(energy+p(if i=ilimit then i-1 else i));
y3:=((24+10*f2)*y2+(f1-12)*y1)/(12-f3);
f1:=f2; f2:=f3; y1:=y2; y2:=f(i+nr):=y3;
errorp:=i;
int:=int+y3*y3;
end;
i:=ilimit+1;
uint:=uint+int*del;
if errorp>NE(0)-2 and errorp=ilimit then begin
comment next interval;
f(i+nr-1):=y2:=if nuipol then(f(i+nr-1)*105
+f(i+nr)*420
-f(i+nr+1)*210
+f(i+nr+2)*84
-f(i+nr+3)*15)/384
else (y1+y2)/2;
uint:=uint-(y3*y3-(y2*y2-y1*y1)/2)*del;
sq:=sq-1;
goto repudefra;
end;
sq:=p0:=0;
i:=1;
y1:=f(1):=abs(scai*f(1));
y2:=f(2):=fb2(y1,l);
iint:=(y1**2+y2**2)*DE(0);
repindefra:
ilimit:=NE(sq);
del:=DE(sq); del2:=del*del;
f1:=del2*(energy+p(if i=1 then 1 else i-1));
f2:=del2*(energy+p(if i=1 then 2 else i+1));
int:=0; up_lim:=(if ilimit<errorp+nr then ilimit
else errorp+nr-1);
for i:=i+2 step 1 until up_lim do
begin
f3:=del2*(energy+p(i));
y3:=((24+10*f2)*y2+(f1-12)*y1)/(12-f3);
f1:=f2; f2:=f3; y1:=y2; y2:=f(i):=y3;
if i<errorp then int:=int+y3*y3;
if y1>0 == y2<0 then begin
if i>.5/DE(0) then p0:=p0+1; end;
end;
i:=ilimit-1;
iint:=iint+int*del;
if errorp+nr-1>ilimit then
begin
comment next interval;
y1:=f(i-1);
sq:=sq+1;
goto repindefra;
end;
scau:=1/f(errorp+3*nr//2);
uint:=uint*scau**2;
scai:=1/f(errorp+nr//2);
iint:=iint*scai**2;
int:=iint+uint;
itr:=itr+1;
delen:=-(f(errorp+nr-1)*scai-f(errorp+2*nr-1)*scau
-f(errorp)*scai+f(errorp+nr)*scau)/int/del/(nr-1);
if abs delen>.1*energy then delen:=sign(delen)*energy*.1;
if p0<>zp then delen:=sign(p0-zp)*abs(delen);
if nukey or (maxitr<>0 and itr>=maxitr) then
begin
write(out,"nl",1,<:errorp:>,errorp,<: p0:>,p0,
<: delen:>,delen,
<: int:>,int,<: uint:>,uint,<: iint:>,iint,
"nl",1,<:sq:>,sq,<: scai:>,scai,<: scau:>,scau);
outendcur(10);
outendcur(10);
if -,nukey then goto ENDN; end;
end;
ENDN:
norm:=sign(scai)/sqrt(int);
scai:=norm*scai;
scau:=norm*scau;
for i:=1 step 1 until errorp-1 do f(i):=f(i)*scai;
for i:=errorp step 1 until elem do f(i):=f(i+nr)*scau;
NE(-3):=errorp;
NE(-2):=p0;
NE(-1):=itr-1;
numug:=-.5*energy;
end;
\f
real procedure nucut(q,n,l,lold,j,energy,B,DE,NE,f,p,nstar,zeroes,Z);
value q,n,l,lold,j,energy,nstar,Z; integer q,n,l,lold,j,Z;
real energy,nstar;
array B,DE,f,p;
integer array NE,zeroes;
begin
message nucut 81-01-29;
real f1,f2,f3,y0,y1,y2,y3,del,del2,r1m,r1me,
int,uint,norm,yfit,A,rns,delint,rint,x,overl,
error,newerror,ll2,dr,dnorm,dr1m,delta_r,d_ilim;
integer i,sq,elem,elem0,ilimit,imin,imax,
up_lim,zeroc,zp,cutcase;
boolean min,max,zero,nml2,nsint,nsgl1,rlist,absmax;
real procedure delr(x,del,i,dnorm,dr1m,list);
value x,del,i,list; integer i;
boolean list;
real x,del,dnorm,dr1m;
if rlfit and i>1 then
begin
real A,Ad;
A:=f(i)**2;
Ad:=A*del;
dnorm:=A*x;
dr:=delr:=(dnorm/(2*l+4)-Ad)*x;
dr1m:=(dnorm/(2*l+2)-Ad)/x;
dnorm:=dnorm/(2*l+3)-Ad;
if list and nukey then write(out,"nl",1,<:i,x,dr,dn,d1/r ,Ad :>,
i,x,dr,dnorm,dr1m,Ad);
end delr else delr:=dnorm:=dr1m:=0;
procedure removesol;
if i<up_lim and l>0 then
begin
ilimit:=i;
cutcase:=3;
if nukey then write(out,"nl",1,<:div y2,yfit :>,
<< -d.ddd'+ddd>,abs y2,yfit,<< dd.dd>,rval(i));
end;
prno:=3;
rlist:=lookupentry(<:nurlist:>)=0;
d_ilim:=0;
if lookupentry(<:nudilim:>)=0 then
begin
integer array t(1:10);
lookuptail(<:nudilim:>,t);
d_ilim:=t(6)-t(7);
end;
absmax:=false;
min:=zero:=false;
max:=true;
nsint:=abs(round nstar-nstar)<'-3;
ll2:=l*(l+1)/2;
nsgl1:=nstar>l+1;
if nsgl1 then d_ilim:=0;
elem0:=NE(0)-2;
zp:=NE(-2);
if nsint then zp:=nstar-l-1;
cutcase:=zeroc:=0;
if nukey then
begin
write(out,"nl",2,"*",67,"nl",1,"*",26,"sp",4,<:nucut:>,"sp",5,"*",27,
"nl",1,<:charge :>,Z,"nl",1,<:l,lold :>,l,lold,"nl",1);
writestate(out,-1,n,2*l,-1);
write(out,"nl",1);
end;
elem:=NE(q-1);
potential(energy,1,q,n,l,lold,NE,DE,p,f);
energy:=-2*energy;
NE(-1):=2;
r1me:=1/nstar/nstar;
rns:=1/2*(3*nstar**2-l*(l+1));
nml2:=-,randr1mcrit and ((l<=3 or
(l>3 and abs(round nstar - nstar)<.05)) and l>0);
imin:=if l<2 then 1.0 else
(if nsgl1 then abs(nstar-round nstar) else
if nstar-l>.75 then 4*DE(0) else
.5)/DE(0);
if l=2 then imin:=imin//2;
if l>2 and imin<.5/DE(0) then imin:=.5/DE(0);
if imin*DE(0)<l-4 then imin:=(l-4)/DE(0);
if l>3 then imin:=(l+0)/DE(0);
if -,autcut then imin:=1;
rint:=overl:=0;
setrydwhere(<:nucut:>,ncur,lcur,0,0);
operator(false);
yfit:=maxreal/100;
y1:=if nstar<l+1 then '-300 else exp(-B(q));
if y1<'-300 then y1:='-300;
f(elem):=y1;
y2:=f(elem-1):=ufb2(y1,-.5*energy,q-1,B,DE);
uint:=(y2*y2+y1*y1)*DE(q-1);
sq:=q+1;
if nukey then write(out,"nl",1,<:min ilimit :>,imin);
for sq:=sq-1 while sq>=1 and cutcase=0 do begin
i:=NE(sq-1);
up_lim:=NE(0)-2;
del:=DE(sq-1);
x:=B(sq)-del;
del2:=del*del;
f1:=del2*(energy+p(i));
f2:=del2*(energy+p(i-1));
int:=0;
ilimit:=NE(sq-2)-1;
if sq=1 then begin
ilimit:=if -,autcut then cut/DE(0) else imin;
if nukey then write(out,"nl",1,<:intlimit :>,ilimit,
<< dd.ddd>,rval(ilimit));
end;
if ilimit<1 then ilimit:=1;
for i:=i-2,i-1 while i>=ilimit and cutcase=0 do
begin
f3:=del2*(energy+
p(if i<>ilimit then i else if i>1 then i-1 else 1));
y3:=((24+10*f2)*y2+(f1-12)*y1)/(12-f3);
f1:=f2; f2:=f3; y0:=y1; y1:=y2; y2:=f(i):=y3;
delint:=y3*y3;
int:=int+delint;
if autcut then begin
if absmax and abs y2>yfit then removesol else
if max then begin
if y1>=y0 and y1>=y2 then
begin comment a true max found;
zero:=true; max:=false;
if -,absmax then yfit:=abs y2;
absmax:=true;
if nukey then write(out,"nl",1,<:max found :>,
"sp",6,<< ddd.d0>,rval(i),<< -d.ddd'+ddd>,yfit);
end;
end search for max else
if zero then begin
if (y2>0 and y0<0) or (y2<0 and y0>0) then
begin comment a zero found;
zero:=false;
zeroc:=zeroc+1;
zeroes(zeroc):=i;
if nukey then
write(out,"nl",1,<:zero found :>,"sp",6,<< ddd.d0>,rval(i),
<< d>,zeroc,<:.zero:>);
if y2>0 then max:=true else min:=true;
if zeroc>zp or (l>3 and zeroc>entier(nstar+.95)-l-1) then begin
ilimit:=i;
zeroc:=zeroc-1;
cutcase:=4;
end;
end zero found;
if i<elem0 and (nml2 or nsgl1) then begin
if y1<=y2 and y1<=y0 then begin
comment a false min found;
ilimit:=i;
cutcase:=1;
if nukey then
write(out,"nl",1,<:false min found :>,<< ddd.d0>,rval(i));
end false min found;
if y1>=y2 and y1>=y0 then begin
comment a false max found;
ilimit:=i;
cutcase:=2;
if nukey then
write(out,"nl",1,<:false max found :>,<< ddd.d0>,rval(i));
end false max found;
end test false min and max in innermost;
end search for zero else
if min then begin
if y2>=y1 and y1<=y0 then
begin comment a true min found;
zero:=true; min:=false;
if nukey then write(out,"nl",1,<:min found :>,
"sp",6,<< ddd.d0>,rval(i),<< -d.ddd'+ddd>,yfit);
end;
end search for min;
end search for a cut criteria;
end main integration loop;
i:=ilimit+1;
uint:=uint+(int-y3*y3)*del;
if sq>1 and cutcase=0 then begin
comment next interval;
f(i-1):=y2:=if nuipol then(f(i-1)*105
+f(i)*420
-f(i+1)*210
+f(i+2)*84
-f(i+3)*15)/384
else (y1+y2)/2;
uint:=uint+(y2*y2+y1*y1)*del;
end;
end for sq;
dnorm:=dr1m:=0;
for i:=1 step 1 until ilimit-1 do f(i):=0;
if cutcase=0 and autcut and l>0 and
(nstar<l+1 or abs y2>yfit) then removesol;
rint:=renorm(f,DE,B,NE,q,r1m);
x:=rval(ilimit);
dr:=delr(x,del,ilimit,dnorm,dr1m,true);
if nukey and l=0 then
begin
write(out,"nl",1,<:s-state after integration:>,
"nl",1,<:<r>,<r>e :>,rint,rns,
"nl",1,<:<1/r>,<1/r>e :>,r1me,r1m);
end;
if nukey then
begin
write(out,"nl",1,"*",2,<:after integration :>);
writestate(out,-1,n,2*l,j);
write(out,"nl",1,<:cut :>,rval(ilimit),
"nl",1,<:cutcase :>,cutcase,
"nl",1,<:zeroes :>,zeroc,
"nl",1,<:<r>e <r> :>,rns,(rint+dr)/(1+dnorm),<: <dr> <dnorm> :>,dr,dnorm);
end;
if rns<rhomin then rns:=rhomin;
if autcut and l>0 and -,nsint then
begin
if nukey then write(out,"nl",1,
<:************************** <r> adjust ***************************:>);
overl:=1;
x:=rval(ilimit);
dr:=delr(x,del,ilimit,dnorm,dr1m,true);
deltar:=f(ilimit)**2*del;
if nukey then write(out,"nl",1,<:<r>e,<r> :>,rns,(rint+dr)/(1+dnorm),
<: delta <r> :>,deltar*x/(1-deltar),
<:<10> cut :>,rval(ilimit));
i:=0;
cutcase:=6;
y1:=y2:=0;
sq:=0;
up_lim:=NE(0);
x:=del:=DE(0);
imax:=.9*elem;
error:=maxreal/2;
newerror:=maxreal/4;
<*adjustment will only take place when <r>e><r> *>
for i:=i+1 while newerror>2'-3 and abs newerror<= abs error and
-,((y2>0 and y1<0) or (y2<0 and y1>0)) and i<=imax do begin
error:=newerror;
if i>up_lim then begin
sq:=sq+1;
del:=DE(sq);
x:=B(sq+1);
up_lim:=NE(sq);
end;
y1:=y2;
y2:=f(i);
int:=y2*y2*del;
overl:=overl-int;
rint:=rint-x*int;
if i>=ilimit then
begin
dr:=delr(x,del,i,dnorm,dr1m,false);
newerror:=(1-(rint+dr)/(overl+dnorm)/rns);
if rlist then
begin
write(out,"nl",1,"*",1,i,
rval(i),(rint+dr)/(overl+dnorm),rint,dr,overl,
dnorm,<<-d.ddd'd>,newerror);
end;
if newerror>2'-3 and abs newerror<abs error then
begin
if i>1 then f(i-1):=0;
ilimit:=i;
end;
end i>=ilimit;
x:=x+del;
end;
if nstar<l+1 and zeroc=0 and cutcase<4 then cutcase:=5;
rint:=renorm(f,DE,B,NE,q,r1m);
dr:=delr(rval(ilimit),del,ilimit,dnorm,dr1m,true);
if nukey then write(out,"nl",1,<:after <r> adjustment <r>e,<r> :>,
rns,(rint+dr)/(1+dnorm),
<: cut :>,rval(ilimit),<: error :>,newerror);
end <r> adjust;
if nukey then write(out,"nl",1,
if r1mc then <:<1/r> criterion :> else <: :>,
<:<1/r> <1/r>e :>,(r1m+dr1m)/(1+dnorm),r1me,
<: cut :>,<<dd.dd>,rval(ilimit),
<: n* :>,<<d.ddd>,nstar,<: l :>,<<d>,l);
if autcut and l>0 and -,nsgl1 and r1mc then
begin
if nukey then write(out,"nl",1,
<:************************** <1/r> adjust ***************************:>);
cutcase:=5;
overl:=1; del:=DE(0); x:=del; i:=sq:=0;
up_lim:=NE(0);
for i:=i+1 while (r1m+dr1m)/(overl+dnorm)>=r1me and i<elem do begin
if i>up_lim then begin
sq:=sq+1; x:=B(sq+1); up_lim:=NE(sq);
del:=DE(sq);
end;
y2:=f(i);
int:=y2*y2*del;
overl:=overl-int;
r1m:=r1m-int/x;
if i>=ilimit then
begin
dr:=delr(x,del,i,dnorm,dr1m,false);
ilimit:=i;
end;
x:=x+del;
if i>1 then f(i-1):=0;
end adjust <1/r>;
rint:=renorm(f,DE,B,NE,q,r1m);
dr:=delr(rval(ilimit),del,ilimit,dnorm,dr1m,true);
if nukey then write(out,"nl",1,<:after adjustment <1/r>e <1/r> :>,r1me,
(r1m+dr1m)/(1+dnorm),
<: cut :>,rval(i));
end r1mcriterion;
if autcut and l>0 and randr1mcrit and -,nsgl1 then begin
if nukey then write(out,"nl",1,
<:************************** error adjust ***************************:>);
overl:=1; del:=DE(0); x:=del; i:=sq:=0;
up_lim:=NE(0);
newerror:=error:=abs((rint+dr)/(1+dnorm)-1.5/(r1m+dr1m)/(1+dnorm)+ll2);
cutcase:=6;
for i:=i+1 while newerror<=error and i<elem do
begin
if i>up_lim then begin
sq:=sq+1; x:=B(sq+1); up_lim:=NE(sq);
del:=DE(sq);
end;
y2:=f(i);
int:=y2*y2*del;
overl:=overl-int;
r1m:=r1m-int/x;
rint:=rint-int*x;
if i>=ilimit then
begin
dr:=delr(x,del,i,dnorm,dr1m,false);
ilimit:=i;
end;
x:=x+del;
if d_ilim=0 and i>1 then f(i-1):=0;
error:= newerror;
newerror:=abs((rint+dr)/(overl+dnorm)-1.5/(r1m+dr1m)*(overl+dnorm)+ll2);
end adjust;
if d_ilim<>0 then
begin
for i:=1 step 1 until ilimit+dilim-1 do f(i):=0;
write(out,"nl",1,<:cut (error) :>,rval(ilimit),<:d_ilimit :>,d_ilim);
ilimit:=ilimit+d_ilim
end;
rint:=renorm(f,DE,B,NE,q,r1m);
dr:=delr(rval(ilimit),del,ilimit,dnorm,dr1m,true);
if nukey then write(out,"nl",1,<:after error minimisation:>,"nl",1,
<:<1/r>e <1/r> :>,r1me,(r1m+dr1m)/(1+dnorm),"nl",1,
<:<r>e <r> :>,rns,(rint+dr)/(1+dnorm),"nl",1,
<:<37>error :>,newerror/(rint+dr)*(1+dnorm)*100,"nl",1,
<:cut :>,rval(ilimit));
end nml2 and weighted <r> <1/r> criterion;
if autcut then cut:=rval(ilimit);
if rlfit and l>0 then begin
A:=f(ilimit)/(rval(ilimit)**(l+1));
sq:=0;
del:=x:=DE(sq);
up_lim:=NE(sq);
for i:=1 step 1 until ilimit-1 do
begin
if i>up_lim then
begin
sq:=sq+1;
del:=DE(sq);
up_lim:=NE(sq);
x:=B(sq+1);
end change step;
f(i):=A*x**(l+1);
x:=x+del;
end;
rint:=renorm(f,DE,B,NE,q,r1m);
if nukey then write(out,"nl",1,<:after r**l+1 fit :>,"nl",1,
<:<1/r> <r> :>,r1m,rint);
if nukey then write(out,"nl",1,
<:<37>error :>,100*abs(rint-1.5/r1m+ll2));
end rlfit;
NE(-1):=0;
NE(-2):=zeroc;
NE(-3):=cutcase;
if nukey then write(out,"nl",1);
nucut:=-.5*energy;
end;
▶EOF◀