|
|
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: »fracparpr«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦7b6e66aaa⟧ »crypr«
└─⟦this⟧
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦84e44a383⟧ »crypr«
└─⟦this⟧
<* Wigner 6J and 9J symbols and fractional parantage coefficients
1979-02-16
*>
procedure init_factorial(f);
array f;
begin
integer i;
f(0):=1;
for i:=1 step 1 until 25 do
f(i):=f(i-1)*i;
end init_factorial;
real procedure sjs(j1,j2,j3,l1,l2,l3);
value j1,j2,j3,l1,l2,l3; integer j1,j2,j3,l1,l2,l3;
begin
integer w,wmin,wmax;
real omega;
real procedure delta(a,b,c);
value a,b,c; integer a,b,c;
begin
delta:=sqrt(factorial((a+b-c)//2)*
factorial((a-b+c)//2)*
factorial((b+c-a)//2)/
factorial((a+b+c+2)//2));
end delta;
if j1+j2<j3 or abs(j1-j2)>j3 or j1+j2+j3<>
2*((j1+j2+j3)//2) or
j1+l2<j3 or abs(j1-l2)>l3 or j1+l2+l3<>
2*((j1+l2+l3)//2) or
l1+j2<l3 or abs(l1-j2)>l3 or l1+l2+l3<>
((l1+j2+l2)//2) or
l1+l2<j3 or abs(l1-l2)>j3 or l1+l2+j3<>
((l1+l2+j3)//2) then sjs:=0 else
begin
omega:=0;
wmin:=j1+j2+j3;
if wmin<j1+l2+l3 then wmin:=j1+l2+l3;
if wmin<l1+j2+l3 then wmin:=l1+j2+l3;
if wmin<l1+l2+j3 then wmin:=l1+l2+j3;
wmax:=j1+j2+l1+l2;
if wmax>j2+j3+l2+l3 then wmax:=j2+j3+l2+l3;
if wmax>j3+l1+l3+l1 then wmax:=j3+j1+l3+l1;
for w:=wmin step 2 until wmax do
omega:=omega+(if w=4*(w//4) then 1 else -1)
*factorial(w//2+1)/(factorial((w-j1-j2-j3)//2)
*factorial((w-j1-l2-l3)//2)
*factorial((w-l1-j2-l3)//2)
*factorial((w-l1-l2-j3)//2)
*factorial((j1+j2+l1+l2-w)//2)
*factorial((j2+j3+l2+l3-w)//2)
*factorial((j3+j1+l3+l1-w)//2));
sjs:=delta(j1,j2,j3)*delta(j1,l2,l3)*
delta(l1,j2,l3)*delta(l1,l2,j3)*omega;
end
end sjs;
real procedure njs(j11,j12,j13,j21,j22,j23,j31,j32,j33);
value j11,j12,j13,j21,j22,j23,j31,j32,j33;
integer j11,j12,j13,j21,j22,j23,j31,j32,j33;
begin
integer k,kmin,kmax;
real nj;
if j11+j12<j31 or abs(j11-j21)>j31 or j11+j21+j31
<>2*((j11+j21+j31)//2) or
j21+j22<j23 or abs(j21-j22)>j23 or j21+j22+j23
<>2*((j21+j22+j23)//2) or
j31+j32<j33 or abs(j31-j32)>j33 or j31+j32+j33
<>2*((j31+j32+j33)//2) or
j11+j12<j13 or abs(j11-j12)>j13 or j11+j12+j13
<>2*((j11+j12+j13)//2) or
j12+j22<j32 or abs(j12-j22)>j32 or j12+j22+j32
<>2*((j12+j22+j32)//2) or
j13+j23<j33 or abs(j13-j23)>j33 or j13+j23+j33
<>2*(j13+j23+j33)//2 then njs:=0 else
begin
nj:=0;
kmin:=abs(j21-j32);
if kmin<abs(j11-j33) then kmin:=abs(j11-j33);
if kmin<abs(j12-j23) then kmin:=abs(j12-j23);
kmax:=j21+j32;
if kmax>j11+j33 then kmax:=j11+j33;
if kmax>j12+j23 then kmax:=j12+j23;
for k:=kmin step 2 until kmax do
nj:=nj+(if k=2*(k//2) then 1 else -1)*(k+1)*
sjs(j11,j21,j31,j32,j33,k)*
sjs(j12,j22,j32,j21, k,j23)*
sjs(j13,j23,j33, k,j11,j12);
njs:=nj;
end;
end njs;
real procedure vcc(j1,j2,j,m1,m2,m);
value j1,j2,j,m1,m2,m;
integer j1,j2,j,m1,m2,m;
begin
integer z,zmin,zmax;
real cc;
if m1+m2<>m or abs(m1)>abs(j1) or abs(m2)>abs(j2) or
abs(m)>abs(j) or j>j1+j2 or j<abs(j1-j2) or
j1+j2+j<>2*((j1+j2+j)//2) then vcc:=0 else
begin
zmin:=0;
if j-j2+m1<0 then zmin:=-j+j1+m2;
zmax:=j1+j2-j;
if j2+m2-zmax<0 then zmax:=j2+m2;
if j1-m1-zmax<0 then zmax:=j1-m1;
cc:=0;
for z:=zmin step 1 until zmax do
cc:=cc+(if z=4*(z//4) then 1 else -1)/
factorial(z//2)*
factorial((j1+j2-j-z)//2)*
factorial((j1-m1-z)//2)*
factorial((j2+m2-z)//2)*
factorial((j-j2+m1+z)//2)*
factorial((j-j1-m2+z)//2);
vcc:=sqrt((j+1)*factorial((j1+j2-j)//2)*
factorial((j1-j2+j)//2)*
factorial((j2+j-j1)//2)*factorial((j1+m2)//2)*
factorial((j1-m1)//2)*factorial((j2+m2)//2)*
factorial((j2-m2)//2)*factorial((j+m)//2)*
factorial((j-m)//2)*factorial((j1+j2+j+2)//2))*cc;
end;
end vcc;
real procedure fracpar_p(N,S,L,S1,L1);
value N,S,L,S1,L1; integer N,S,L,S1,L1;
begin
<*calculates fractional parantage coefficients for p
configurations.
N number of p electrons
S1L1 quantum numbers for N-1 electron core
SL total spin and angular momentum
Sobelman p. 104-106
*>
fracparp:=0;
if N>=1 and N<=6 and S>=0 and S<=3 and L<=6 and
S1<=3 and L1<=6 then
begin
case N of begin
<*N=1*> if S=0 and L=0 and S1=0 and L1=0 then fracparp:=1;
<*N=2 Table 18.*> if S1=1 and L1=2 then
begin
if S=0 and (L=0 or L=4) then fracparp:=1 else
if (S=2 and L=2) then fracparp:=1;
end;
<*N=3 Table 19.*>
if S=1 and L=2 and S1=0 and L1=0 then fracparp:=sqrt(2)/3 else
if S=3 and L=0 and L1=2 and S1=2 then fracparp:=1 else
if S=1 and S1=2 and L>0 and L1>0 then
begin
fracparp:=case L//2+L1-2 of (-1/sqrt(2),
1/sqrt(2),-sqrt(5/18),-sqrt(1/2));
end;
<*N=4 Table 20.*>
if S1=3 and L1=0 and S=2 and L=2 then fracparp:=-sqrt(1/3) else
if S=0 and L=0 and S1=1 and L1=2 then fracparp:=1 else
if L>0 and L1>0 and S1=1 then
begin
if (S=2 and L=2) or (S=0 and L=4) then
begin
fracparpr:=case L//2+L1-2 of(-1/2,-1/2,sqrt(5/12),sqrt(3/4));
end;
end;
<*N=5*> if S=1 and L=2 then
begin
if S1=0 and L1=0 then fracparp:=1/sqrt(15) else
if S1=2 and L1=2 then fracparp:=sqrt(3/5) else
if S1=0 and L1=4 then fracparp:=sqrt(1/3);
end;
<*N=6*>
if S=0 and L=0 then fracparp:=1;
end case N;
end;
end fracparp;
▶EOF◀