SpectraRust/tlusty/extracted/cspec.f
2026-03-19 14:05:33 +08:00

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