90 lines
2.6 KiB
Fortran
90 lines
2.6 KiB
Fortran
SUBROUTINE CSPEC(I,J,IC,OS,CP,U0,T,CS)
|
|
C ======================================
|
|
C
|
|
C Non-standard evaluation of collision rates
|
|
C Basically user-supplied procedure; here is an example
|
|
C
|
|
C Van Regemorter's formula following the recommendations of
|
|
C Mihalas (1978, Stellar Atmospheres, 2nd edition)
|
|
C IC=-1 for neutrals
|
|
C IC=-2 for ions
|
|
C
|
|
INCLUDE 'IMPLIC.FOR'
|
|
INCLUDE 'BASICS.FOR'
|
|
INCLUDE 'ATOMIC.FOR'
|
|
DIMENSION CHE1FB(3,4)
|
|
DATA CHE1FB/ 9.63675,-2.22941,-17.30103,
|
|
* 10.85578,-2.40931,-27.00903,
|
|
* 8.38043,-2.04791,-7.36621,
|
|
* 6.95825,-2.01967,-5.98779/
|
|
PARAMETER (EXPIA1=-0.57721566,EXPIA2=0.99999193,
|
|
* EXPIA3=-0.24991055,EXPIA4=0.05519968,
|
|
* EXPIA5=-0.00976004,EXPIA6=0.00107857,
|
|
* EXPIB1=0.2677734343,EXPIB2=8.6347608925,
|
|
* EXPIB3=18.059016973,EXPIB4=8.5733287401,
|
|
* EXPIC1=3.9584969228,EXPIC2=21.0996530827,
|
|
* EXPIC3=25.6329561486,EXPIC4=9.5733223454)
|
|
|
|
CS=0.
|
|
|
|
IF(IC.GT.-10) THEN
|
|
|
|
IF(U0.LE.UN) THEN
|
|
EXPIU0=-LOG(U0)+EXPIA1+U0*(EXPIA2+U0*(EXPIA3+U0*(EXPIA4+
|
|
* U0*(EXPIA5+U0*EXPIA6))))
|
|
ELSE
|
|
EXPIU0=EXP(-U0)*((EXPIB1+U0*(EXPIB2+U0*(EXPIB3+
|
|
* U0*(EXPIB4+U0))))/(EXPIC1+U0*(EXPIC2+
|
|
* U0*(EXPIC3+U0*(EXPIC4+U0)))))/U0
|
|
END IF
|
|
|
|
CCCCCC Neutrals (See Auer & Mihalas 1973)
|
|
IF(IC.EQ.-1) THEN
|
|
|
|
IF(U0.LE.14.) THEN
|
|
GG=0.276*EXP(U0)*EXPIU0
|
|
ELSE
|
|
GG=0.066*(1.+1.5/U0)/SQRT(U0)
|
|
ENDIF
|
|
|
|
CCCCCC Ions (See Mihalas 1972)
|
|
ELSE IF(IC.EQ.-2) THEN
|
|
|
|
GG0=0.276*EXP(U0)*EXPIU0
|
|
GG=CP
|
|
IF(GG0.GT.CP) GG=GG0
|
|
|
|
END IF
|
|
T32=T**(-1.5)
|
|
CS=CS+19.7363*T32*EXP(-U0)/U0*GG*OS
|
|
|
|
RETURN
|
|
END IF
|
|
C
|
|
IF(IC.EQ.-11) THEN
|
|
XR=-1.68D0
|
|
CS=CS+2.16*U0**XR/T/SQRT(T)*EXP(-U0)*OS
|
|
C
|
|
C Forbidden transitions between n=2 He I sublevels
|
|
C (from Klaus Werner)
|
|
C
|
|
ELSE IF(IC.EQ.-12) THEN
|
|
N0I=NFIRST(IELHE1)
|
|
I=I-N0I+1
|
|
J=J-N0I+1
|
|
IFORB=0
|
|
IF(I.EQ.2 .AND. J.EQ.3) IFORB=1
|
|
IF(I.EQ.2 .AND. J.EQ.5) IFORB=2
|
|
IF(I.EQ.3 .AND. J.EQ.4) IFORB=3
|
|
IF(I.EQ.4 .AND. J.EQ.5) IFORB=4
|
|
IF(IFORB.EQ.0) CALL QUIT(' Inconsistent ICOL - CSPEC',iforb,0)
|
|
XT=LOG10(T)
|
|
GAM=CHE1FB(1,IFORB)+CHE1FB(2,IFORB)*XT+CHE1FB(3,IFORB)/XT/XT
|
|
GAM=EXP(2.30258509299405*GAM)
|
|
CS=CS+5.465D-11*SQRT(T)*EXP(-U0)*GAM
|
|
|
|
END IF
|
|
|
|
RETURN
|
|
END
|