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

⟦d065b01f6⟧ TextFile

    Length: 18432 (0x4800)
    Types: TextFile
    Names: »rydiffint«

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

<*                 rydiffint  solves the differential equation            *>
<*79-12-05*>


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;
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;

real procedure delr(x,i,dnorm,dr1m,list);
value i,list; integer i;
boolean list;
real x,dnorm,dr1m;
if rlfit then
begin
real A;
A:=f(i)**2;
dnorm:=A*x;
dr:=delr:=dnorm*x/(2*l+4);
dr1m:=dnorm/x/(2*l+2);
dnorm:=dnorm/(2*l+3);
if list and nukey then write(out,"nl",1,<:i,x,dr,dn,d1/r :>,i,x,dr,dnorm,dr1m);
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;
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 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/10000;
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 max then begin
    if y1>=y0 and y1>=y2 then
    begin comment a true max found;
    zero:=true; max:=false; yfit:=abs y2;
    if nukey then write(out,"nl",1,<:max found  :>,
      "sp",6,<< ddd.d0>,rval(i),<<    -d.ddd'+ddd>,yfit);
    end;
      if abs y2>100*yfit then removesol;
    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;
    if abs y2>100*yfit then removesol;
    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; yfit:=abs y2;
    if nukey then write(out,"nl",1,<:min found  :>,
      "sp",6,<< ddd.d0>,rval(i),<<    -d.ddd'+ddd>,yfit);
    end;
      if abs y2>100*yfit then removesol;
    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,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,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,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
        f(i):=0;
        ilimit:=i+1;
      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),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,i,dnorm,dr1m,false);
      ilimit:=i+1;
    end;
    x:=x+del;
    f(i):=0;
    end adjust <1/r>;
rint:=renorm(f,DE,B,NE,q,r1m);
dr:=delr(rval(ilimit),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,i,dnorm,dr1m,false);
    ilimit:=i+1;
  end;
  x:=x+del;
  if d_ilim=0 then f(i):=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),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 ilimit<NE(0) 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,
    <:error :>,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◀