ADAS Subroutine qlpr
FUNCTION QLPR(Z1,N1,N2,E1,ZP,ATMSSP) C IMPLICIT REAL*8(A-H,O-Z) C C----------------------------------------------------------------------- C C ****************** FORTRAN77 FUNCTION: QLPR ************************* C C----------------------------------------------------------------------- C PURPOSE: CALCULATE LODGE-PERCIVAL-RICHARDS ION IMPACT EXCITATION C CROSS-SECTIONS IN ORIGINAL FORM (J.PHYS.B. (1976)9,239). C C EXCITATION CROSS-SECTION IS EVALUATED AND DE-EXCITATION CROSS-SECTION C OBTAINED BY DETAILED BALANCE C C SCALING TO ARBITRARY PROJECTILE CHARGE FOLLOWS RECOMMENDATIONS C OF RIENHOLD,, OLSEN & FRITSCH (1990)PHYS.REV.A 41,4837 C C C INPUT C Z1=TARGET ION CHARGE +1 C N1=INITIAL PRINCIPAL QUANTUM NUMBER C N2=FINAL PRINCIPAL QUANTUM NUMBER C E1=ENERGY OF EQUIVALENT ELECTRON IN RYDBERGS C (CORRESPONDS TO ACTUAL PROJECTILE ENERGY/25KEV) C ZP=PROJECTILE CHARGE C ATMSSP= PROJECTILE MASS IN PROTON UNITS C OUTPUT C QLPR=CROSS-SECTION IN PI*A0**2 UNITS C C C *********** H.P.SUMMERS, JET 16/ 7/90 *************** C C NOTES: THIS ROUTINE IS NOT YET PROPERLY ANNOTATED C C UNIX-IDL PORT: C C VERSION: 1.1 DATE: 16-1-96 C MODIFIED: TIM HAMMOND (TESSELLA SUPPORT SERVICES PLC) C - FIRST VERSION C C VERSION: 1.2 DATE: 16-05-07 C MODIFIED: Allan Whiteford C - Updated comments as part of subroutine documentation C procedure. C----------------------------------------------------------------------- C C----------------------------------------------------------------------- ZZ1=Z1*Z1 ZZP=ZP*ZP IF(N1.LT.N2)THEN E=E1 T1=1.0D0 EN1=N1 EN2=N2 ELSEIF (N1.EQ.N2)THEN QLPR=0.0D0 RETURN ELSE E2=E1-ZZ1*(1.0D0/(EN1*EN1)-1.0D0/(EN2*EN2))/(1836.12*ATMSSP) E=E2 T1=(EN2*EN2*E2)/(EN1*EN1*E1) EN1=N2 EN2=N1 ENDIF S=EN2-EN1 EN12=EN1*EN2 A=2.666667D0/S*(EN2/(S*EN1))**3*(0.184D0-0.04/S**0.66667D0)* & (1.0D0-0.2D0*S/EN12)**(1.0D0+2.0D0*S) D=DEXP(-ZZ1*ZZP/(EN12*E*E)) F=(1.0D0-0.3D0*S*D/EN12)**(1.0D0+2.0D0*S) Y=1.0D0/(1.0D0-D*DLOG(18.0D0*S)/(4.0D0*S)) XL=DLOG((1.0D0+0.53D0*E*E*EN1*(EN2-2/EN2)/(ZZ1*ZZP)) & /(1.0D0+0.4D0*E/ZP)) G=0.5D0*(E*EN1*EN1/(Z1*ZP*(EN2-1.0D0/EN2)))**3 T=DSQRT(2.0D0-(EN1/EN2)**2) XP=2.0D0*Z1*ZP/(E*EN1*EN1*(T+1.0D0)) XM=2.0D0*Z1*ZP/(E*EN1*EN1*(T-1.0D0)) CP=(XP*XP/(2.0D0*Y+1.5D0*XP))*DLOG(1.0D0+0.66667D0*XP) CM=(XM*XM/(2.0D0*Y+1.5D0*XM))*DLOG(1.0D0+0.66667D0*XM) H=CM-CP C WRITE(6,1000)E,EN1,EN2,Z1,ZP,T1 C WRITE(6,1001)A,D,XL,F,G,H C WRITE(7,1000)E,EN1,EN2,Z1,ZP,T1 C WRITE(7,1001)A,D,XL,F,G,H QLPR=T1*EN1**4*(A*D*XL+F*G*H)*(ZZP/ZZ1)/E RETURN 1000 FORMAT(1H ,'E=',1PD10.2,3X,0P,'EN1=',F4.1,3X,'EN2=',F4.1,3X, & 'Z1=',F4.1,3X,'ZP=',F4.1,3X,'T1=',1PD10.2) 1001 FORMAT(1H ,'A=',1PD10.2,3X,'D=',1PD10.2,3X,'XL=',1PD10.2,3X, & 'F=',1PD10.2,3X,'GP=',1PD10.2,3X,'H=',1PD10.2) END INTEGER N1, N2 REAL*8 ATMSSP, E1, Z1, ZP