|
|
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: 8448 (0x2100)
Types: TextFile
Names: »simcalc«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦b050de23d⟧ »csim«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦b050de23d⟧ »csim«
└─⟦this⟧
<* simcalc *>
<*calculation of simulated decay curves*>
procedure simcalc(out,dip,states,dipindex,N0,dt,tmin,tmax,curstate,points);
value dt,tmin,tmax,curstate,points;
real dt,tmin,tmax;
integer curstate,points;
zone out;
integer array dip,states,dipindex;
array N0;
begin
array Ni,dNi(0:maxstates-1),pvalue(1:maxdiagram);
integer array Ewritten(0:maxstates-1);
algol copy.statevar;
integer i,j,state2,dti,tottrans,intv;
real dn,lambda,expdecayv,s0,tau,x,dx,xmin,xmax;
integer array field dipi;
array field dipf;
ewritten(Ewritten);
for i:=0 step 1 until maxstates-1 do Ni(i):=N0(i);
if proc and -,generate then
begin
write(out,"nl",2);
intv:=0;
repeat intv:=intv+1;
dx:=dxval(intv);
xmin:=xval(intv);
xmax:=xval(intv+1);
j:=0;
repeat
x:=xmin+j*dx;
j:=j+1;
expdecayv:=simproc(x,maxdiagram,N0,Ewritten,pvalue);
message simproc in preceeding line may be undeclared;
if list then
write(out,"nl",1,<<dd.ddd>,x);
for i:=1 step 1 until maxdiagram do
write(out,<< -d.dddd'+zd>,pvalue(i));
until x>=xmax-dx or x>=tmax;
until x>=tmax;
end simproc
else
for dti:=1 step 1 until points do
begin
for i:=0 step 1 until maxstates-1 do dNi(i):=0;
tottrans:=0;
for state:=0 step 1 until maxstates-1 do
begin
tau:=gettau(states,state);
s0:=if delt=0 then 1 else sinh(delt/tau)/delt*tau;
for i:=gettransno(states,state) step -1 until 1 do
begin
dipi:=dipf:=diprecsize*tottrans;
lambda:=dip.dipf(9);
if lambda<-smallreal then
begin
dn:=Ni(state)*dip.dipf(7)/10*dt*s0;
dNi(state):=dNi(state)-dn;
if state<>dip.dipi(1) then alarm(<:state error :>,state,dip.dipi(1));
state2:=dip.dipi(2);
dNi(state2):=dNi(state2)+dn;
end lambda<0;
tottrans:=tottrans+1;
end calculate dn;
end state;
for i:=0 step 1 until maxstates-1 do
Ni(i):=Ni(i)+dNi(i);
if list then write(out,"nl",if (dti-1) mod 3=0 then 1 else 0,
"sp",if (dti-1) mod 3 <>0 then 3 else 0,
<< -d.dddddddd'+d>,dt*dti,Ni(curstate));
if dti=dtt and test then
begin
write(out,"nl",3,<:snapshot of Ni at :>,dtt*dt);
for i:=0 step 1 until maxstates-1 do
write(out,"nl",if i mod 5=0 then 1 else 0,
"sp",if i mod 5<>0 then 3 else 0,i,Ni(i));
outendcur(10);
end test;
end time loop;
end simcalc;
procedure simmodel(bsname,curstate,parterm,N0,N00,list,model,beta);
value curstate,N00,list,model,beta;
integer curstate,model; real N00,beta; boolean list;
array bsname,N0;
integer array parterm;
if model>=0 then
begin
integer trans,tottrans;
real cut,tau;
algol list.off copy.statevar;
algol list.off copy.allstatel;
end for state;
getstate(states,curstate,n,J,seriesindex,nstar,Ecm,L,app);
ser:=seriesindex*seriessize;
l:=series.ser(1);
if model=0 then N00:=N00/N0(curstate);
if model>1 and model<6 then N00:=N00*nstar**3;
if model=3 or model=4 then N00:=N00*nstar**2;
if finestruct and model>1 then N00:=N00/(J+1);
if model=3 then N00:=N00/(l+1);
if model=5 and l mod 2=1 then N00:=N00/3;
if model=6 then N00:=N00*((beta*cau)**2*nstar+Z*Z/nstar)**3;
end stateloop;
if lookupentry(<:model6:>)=0 then
begin
write(out,"nl",3,<:test of model 6 :>,
"nl",1,<:Z= :>,Z,
"nl",1,<:beta=:>,beta,1/beta,
"nl",1,<:N(0)= :>,N00);
writechargerec(out);
write(out,"nl",2);
end testmodel6;
algol list.off copy.allstatel;
case model+1 of begin
begin
comment model 0, renormalize to curstate;
N0(stateindex+state):=N0(stateindex+state)*N00*
(if stateindex+state<>curstate then cascadefactor else 1);
end model 0;
begin
comment model 1, only curstate populated;
if stateindex+state=curstate then N0(stateindex+state):=N00;
end model1;
begin
comment model 2, (2*j+1)/n**3;
N0(stateindex+state):=N00/(nstar**3)*
(if finestruct then J+1 else 1);
end model2;
begin
comment model 3, (2*J+1)*(l+1)/n**5;
N0(state+stateindex):=N00/(nstar**5)*
(if finestruct then J+1 else 1)*(l+1);
end model3;
begin
comment model 4, (2*J+1)/n**5;
N0(state+stateindex):=N00/(nstar**5)*
(if finestruct then J+1 else 1);
end model4;
begin
comment model 5, (2*J+1)/n**3*(l odd then 3 else 1);
N0(state+stateindex):=N00/nstar**3*
(if finestruct then J+1 else 1)*(if l mod 2=1 then 3 else 1);
end model5;
begin
comment model 6, plasma model of D. G. Ellis,
N:=(beta**2*cau**2*nstar+Z**2/nstar)**-3,
lmax:=2*Z/cau/beta,
beta:=13.9/300*sqrt(E in MeV/ Mass in amu);
N0(state+stateindex):=N00/(beta*beta*cau*cau*nstar+
Z*Z/nstar)**(-3)*
(if finestruct then J+1 else 1);
end model6;
begin
comment model 7, (J+1)*(l+1)/n**2;
N0(state+stateindex):=N00/(nstar**2)*
(if finestruct then J+1 else 1)*(l+1);
end model7;
begin
comment model 8, (J+1)*(l+1)/n**3;
N0(state+stateindex):=N00/(nstar**3)*
(if finestruct then J+1 else 1)*(l+1);
end model8;
begin
comment model 9, (J+1)*(l+1)/n**4;
N0(state+stateindex):=N00/(nstar**4)*
(if finestruct then J+1 else 1)*(l+1);
end model9;
end case;
if list then
begin
write(out,"nl",1);
writestate(out,L,n,l,J);
write(out,"sp",4,<< -d.dddddd>,nstar,
<< -d.dddd'-dd>,N0(stateindex+state));
end list;
end end stateloop;
outendcur(0);
end simmodel;
procedure beam_foil_decay_curve(bsname,parterm,curstate,tmax,dt);
value curstate,tmax,dt;
integer curstate; real tmax,dt;
array bsname;
integer array parterm;
if chargesegdes(17)>=0 then
write(out,"nl",1,<:*dipole matrixelements not resorted in :>,
string inc(bsname))
else
begin
integer i,trans,tottrans,sta;
real tau,lambda,N00,cut;
array bsdipname(1:2),N0(0:maxstates-1);
algol list.off copy.statevar;
algol list.off copy.statevar2;
integer array field dipi;
array field dipf;
initrydfile(bsname(1) shift 24, real <:dip:>,segdes.dipsize,true);
for i:=1,2 do bsdipname(i):=segdes.dipname(i);
keystat:=lookupentry(<:rysimkey:>)=0;
begin
integer array dipval(1:
if chargestate(7)=0 or (proc and -,generate) then 1 else
chargestate(7)*diprecsize//2),
dipindex(0:maxstates);
if -,(proc and -,generate) then
begin
getalldipval(bsdipname,dipval);
calcdipindex(dipval,dipindex);
end;
N00:=e;
if keystat then
begin
for i:=0 step 1 until maxstates-1 do write(out,dipindex(i));
for i:=0 step 1 until chargestate(7)-1 do
writediprec(dipval,i);
end keystat;
for i:=0 step 1 until maxstates-1 do N0(i):=0;
if readmodel then
begin
model:=0;
readstateaux(bsname,parterm,N0);
N0(curstate):=N0(curstate)*tauf;
end readmodel;
simmodel(bsname,curstate,parterm,N0,N00,list,model,beta);
N00:=N0(curstate);
algol list.off copy.allstatel;
end for state;
getstate(states,curstate,n,J,seriesindex,nstar,Ecm,L,app);
ser:=seriesindex*seriessize;
l:=series.ser(1);
tau:=gettau(states,curstate);
if list then
begin
write(out,"nl",1,<:model :>,model,
<:N0 = :>,N00,
<:tau= :>,tau,
<:tf = :>,tauf);
end list;
outendcur(10);
connectcuro(output);
write(out,"nl",1);
writeatsym(out,S,atno,Z);
write(out,"nl",1);
writestate(out,L,n,l,J);
if -,generate then
begin
if proc then
begin
nsmax:=simproc(-2,0,N0,parterm,N0);
brmin:=simproc(-3,0,N0,parterm,N0);
end proc;
write(out,"nl",1,<< -d.dddddd>,
tau*tauf, points,tmax,"nl",1,
model,delt,brmin,nsmax);
write(out,if proc then maxdiagram else 0);
end -,generate;
if diagram and generate then
writediagramproc(out,bsname,dipval,states,series,dipindex,N0,curstate,delt) else
simcalc(out,dipval,states,dipindex,N0,dt,tmin,tmax,curstate,(tmax-tmin)/dt);
closeout;
end stateloop;
end dipval;
end beam foil decay curve;
▶EOF◀