|
|
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: 6144 (0x1800)
Types: TextFile
Names: »algcoriolis«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦7e928b248⟧ »algbib«
└─⟦this⟧
;gosav
coriolis=set 41
permanent coriolis.17
coriolis=algol index.no
\f
CORIOLIS PERTURBATION
GOS: 6-4-73
begin
comment
The program calculates second order corrections to rotational
states and frequencies arising from the perturbation operator
Ga*Pa + Gb*Pb + Gc*Pc
where the Gg-operators are vibrational operators nondiagonal in
the vibrational quantum numbers.
Only the matrix elements <V(lower)!Gg!V(upper)> connectiong
two vibrational states are taken into account when forming the
perturbation sums. While the three Gg-matrix elements must be gi-
ven in the input, the necessary Pg-matrix elements must be evalua-
ted (approximately) in advance by means of the program ROTCOR. The
matrix elements are stored on the disc in areas to be characteri-
zed by appropiate names in the input. The approximation is:
2 * <V(l),R1 ! Pg ! V(u),R2> =
<V(l),R1 ! Pg ! V(l),R2> + <V(u),R1 ! Pg ! V(u),R2> .
The input requirements are:
1) A textstring in < >, max. 72 characters.
2) Two textstrings in < >, giving the names of two disc areas
containing the Pg-matrix elements for upper and lower
state respectively (as produced by the ROTCOR program).
3) The vibrational energy difference, dW(vib) in MHz.
4) The three coupling constants, Ga, Gb, Gc (MHz).
5) The number of rotational transitions to be analyzed for
Coriolis coupling effects, N.
6) For each of these:
a) Quantum numbers, J, K(-1), K(+1) for lower(1) and
upper(2) rotational state.
b) Two observed frequencies corresponding to upper
and lower vibrational state respectively. If a
transition is unobserved a zero is written.
The output for each rotational transition and each of the two
vibrational states contains:
a) Jacobi corrections to each of the rotational states:
dW(1) , dW(2).
b) Correction to the frequency: d(ny) = dW(2)-dW(1).
c) Ordinary perturbation correction to the frequency.
d) A coriolis corrected ny(obs): ny = ny(obs)-d(ny).
e-h) Partial derivatives of d(ny) with respect to Ga, Gb,Gc
and dW(vib);
integer i,j,k,ku,kl,t,J,k1,k2,Jm,N;
real delta,a,au,al,b,c,d,e,f,fu,fl;
boolean nl, sp, bu, bl, closeres;
array head(1:12), name(1:2), G(1:3);
zone res, Lu,Ll(128,1,stderror);
readhead(in,head,1); readhead(in,name,1); i:= 1;
open(Lu,4,string name(increase(i)),0);
readhead(in,name,1); i:= 1;
open(Ll,4,string name(increase(i)),0);
closeres:= outmedium(res);
read(in,delta,G,N);
sp:= false add 32; nl:= false add 10; i:= 1;
write(res,<:<12>:>,nl,3,string head(increase(i)), nl,2,
<<ddd ddd ddd.000>,<:delta: :>,delta,nl,1,<:G: :>,
G(1),G(2),G(3));
Jm:= 0;
begin
array trans(1:N,1:14);
integer array qtn(1:N,1:4);
for i:=1 step 1 until N do begin
for j:=1 step 1 until 12 do trans(i,j):= 0;
for j:=1,2 do begin
read(in,J,k1,k2); if Jm<J then Jm:= J;
qtn(i, j ):= J shift 8 add k1 shift 8 add k2;
qtn(i,j+2):= (J*(J+1)//2)**2
end;
read(in,trans(i,13),trans(i,14))
end;
ku:= kl:= 0; inrec(Ll,128); inrec(Lu,128);
al:= Ll(1); au:= Lu(1);
repeat:
for i:=1 step 1 until N do
for j:=1,2 do begin
t:= qtn(i,j);
J:= if t = al shift (-24) extract 24 then 2 else
if t = al extract 24 then 3 else 0;
if J<>0 then begin
k1:= (al shift (-32) extract 8)-(al shift (-8) extract 8);
k2:= (al shift (-24) extract 8)-(al extract 8);
bu:= k1 = k1//2*2; bl:= k2 = k2//2*2;
t:= if bu and -,bl then 1 else
if -,bu and -,bl then 2 else
if -,bu and bl then 3 else 0;
if t=0 then goto stop;
c:= (Lu(ku+4)+Ll(kl+4))*qtn(i,j+2)*G(t); b:= G(t)*c*0.5;
e:= Lu(ku+J) - Ll(kl+5-J) + delta;
f:= Ll(kl+J) - Lu(ku+5-J) - delta;
trans(i, j ):= trans(i, j )
+ (b+b)/(sign(e)*sqrt(4*b+e*e)+e);
trans(i,j+2):= trans(i,j+2)
+ (b+b)/(sign(f)*sqrt(4*b+f*f)+f);
if j=1 then begin c:= -c; b:= -b end;
trans(i,4+t):= trans(i,4+t) + c/e;
trans(i,7+t):= trans(i,7+t) + c/f;
trans(i, 11):= trans(i, 11) - b/(e*e);
trans(i, 12):= trans(i, 12) + b/(f*f)
end end;
ku:= (ku+4) mod 128; kl:= (kl+4) mod 128;
if ku=0 then inrec(Lu,128); if kl=0 then inrec(Ll,128);
au:= Lu(ku+1); al:= Ll(kl+1);
if au<>al then begin
if au=Ll(kl+5) then begin kl:= kl+4; al:= Ll(kl+1) end else
if al=Lu(ku+5) then begin ku:= ku+4; au:= Lu(ku+1) end
else goto stop
end;
J:= al shift (-16) extract 8;
if J>=0 and J<=Jm then goto repeat;
close(Lu,true); close(Ll,true);
write(res,nl,2,<:
Transition deltaEu1 deltaEu2 deltaEl1 deltaEl2
deltany(u) deltany(l):>);
for i:=1 step 1 until N do begin
j:= qtn(i,1); k:= qtn(i,2);
a:= trans(i,1); b:= trans(i,2); c:= trans(i,3); d:= trans(i,4);
fu:= trans(i,13)+a-b; fl:= trans(i,14)+c-d;
e:= f:= 0; for t:=1,2,3 do begin
e:= e + trans(i,4+t)*G(t);
f:= f + trans(i,7+t)*G(t) end;
e:= e*0.5; f:= f*0.5;
write(res,nl,2,<<ddd>,
j shift(-16) extract 8,j shift(-8) extract 8,j extract 8,sp,1,
k shift(-16) extract 8,k shift(-8) extract 8,k extract 8,sp,1,
<<-ddddddd.ddd>,a,b,c,d,nl,1,sp,26,b-a,sp,12,d-c,
nl,1,sp,26,e,sp,12,f,nl,1,sp,26,fu,sp,12,fl,<<-d.dddddd'-d>,
nl,1,sp,26,trans(i,5),sp,12,trans(i,8),
nl,1,sp,26,trans(i,6),sp,12,trans(i,9),
nl,1,sp,26,trans(i,7),sp,12,trans(i,10),
nl,1,sp,26,trans(i,11),sp,12,trans(i,12),nl,1)
end;
stop: write(res,<:<12>:>,<:<25>:>); close(res,closeres)
end end
▶EOF◀