96 lines
2.5 KiB
Fortran
96 lines
2.5 KiB
Fortran
|
|
|
|
|
|
OPTIONS /EXTEND_SOURCE
|
|
|
|
SUBROUTINE chargeStateYields(E,masse,Yield_plus,Yield_zero)
|
|
c ===========================================================
|
|
|
|
c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
c Die Funktion sowie die Parameter sind uebernommen aus:
|
|
c
|
|
c M.Gonin, R.Kallenbach, P.Bochsler: 'Charge exchange of hydrogen atoms
|
|
c in carbon foils at 0.4 - 120 keV', Rev.Sci.Instrum. 65 (3), March 1994
|
|
c
|
|
c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
IMPLICIT NONE
|
|
|
|
real E ! kinetische Energie in keV
|
|
real masse ! in keV / c**2
|
|
|
|
real a_zero,a_minus
|
|
real k_Fermi,k_zero,k_minus
|
|
real zwo_k_Fermi
|
|
real k_Fermi_Quad,k_zero_Quad,k_minus_Quad
|
|
real vc_minus,vc_plus,v_Bohr,v_rel
|
|
|
|
parameter ( a_zero = 0.953, a_minus = 0.029 )
|
|
parameter ( k_Fermi = 1.178 ) ! [v_Bohr]
|
|
parameter ( k_Fermi_Quad = k_Fermi * k_Fermi )
|
|
parameter ( zwo_k_fermi = 2. * k_Fermi )
|
|
parameter ( k_zero = 0.991*k_Fermi ) ! [v_Bohr]
|
|
parameter ( k_zero_Quad = k_zero * k_zero )
|
|
parameter ( k_minus = 0.989*k_Fermi ) ! [v_Bohr]
|
|
parameter ( k_minus_Quad = k_minus * k_minus )
|
|
parameter ( vc_minus = 0.284, vc_plus = 0.193 ) ! [v_Bohr]
|
|
parameter ( v_Bohr = 7.2974E-3 ) ! [c]
|
|
|
|
real Q_zero,Q_minus,D
|
|
real Yield_minus,Yield_zero,Yield_plus
|
|
|
|
real help1,help2,help3
|
|
|
|
|
|
c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
if (E.LT.0) then
|
|
write(*,*)
|
|
write(*,*) 'error in subroutine ''chargeStateYields'':'
|
|
write(*,*) 'E = ',E,' < 0!'
|
|
write(*,*) '-> STOP'
|
|
write(*,*)
|
|
STOP
|
|
endif
|
|
|
|
|
|
c Energie in Geschwindigkeit umrechnen (in Einheiten von v_Bohr):
|
|
|
|
c - klassisch:
|
|
|
|
v_rel = SQRT(2.*E/masse) / v_Bohr
|
|
|
|
c - relativistisch:
|
|
|
|
c help1 = 1. + E/masse
|
|
c v_rel = SQRT(1. - 1./(help1*help1)) / v_Bohr
|
|
|
|
|
|
c Die geladenen Anteile berechnen (vgl. obige Referenz):
|
|
|
|
help1 = v_rel*v_rel
|
|
help2 = zwo_k_Fermi*v_rel
|
|
Q_zero = 1. + (k_zero_Quad - k_Fermi_Quad - help1) / help2
|
|
Q_minus = 1. + (k_minus_Quad - k_Fermi_Quad - help1) / help2
|
|
|
|
|
|
help1 = a_zero * Q_zero
|
|
help2 = a_minus * Q_minus
|
|
help3 = (1.-Q_zero)*(1.-Q_minus)
|
|
D = help1*(help2 + (1.-Q_minus)) + help3
|
|
|
|
Yield_minus = help1*help2 / D
|
|
Yield_plus = help3 / D
|
|
|
|
Yield_minus = Yield_minus * exp(-vc_minus/v_rel)
|
|
Yield_plus = Yield_plus * exp(-vc_plus /v_rel)
|
|
|
|
Yield_zero = 1. - (Yield_minus + Yield_plus)
|
|
|
|
c write(6,*) 'E vrel Neutral Plus Minus'
|
|
c write(6,*) E, v_rel, yield_zero, yield_plus, yield_minus
|
|
|
|
END
|
|
|
|
|