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

55 lines
1.9 KiB
Fortran

FUNCTION STARKA(BETA,A,DIV,FAC)
C
C Approximate expressions for the hydrogen Stark profile
C
C Input: BETA - delta lambda in beta units,
C BETAD - Doppler width in beta units
C A - auxiliary parameter
C A=1.5*LOG(BETAD)-1.671
C DIV - only for A > 1; division point between Doppler
C and asymptotic Stark wing, expressed in units
C of betad.
C DIV = solution of equation
C exp(-(beta/betad)**2)/betad/sqrt(pi)=
C = 1.5*FAC*beta**-5/2
C (ie. the point where Doppler profile is equal to
C the asymptotic Holtsmark)
C In order to save computer time, the division point
C DIV is calculated in advance by routine DIVSTR.
C FAC - factor by which the Holtsmark profile is to be
C multiplied to get total Stark Profile
C FAC should be taken to 2 for hydrogen, (and =1
C for He II)
C
INCLUDE 'PARAMS.FOR'
PARAMETER (F0=-0.5758228,F1=0.4796232,F2=0.07209481/2.,AL=1.26)
PARAMETER (SD=0.5641895,SLO=-2.5,TRHA=1.5,BL1=1.52,BL2=8.325)
PARAMETER (SAC=0.07966/2.)
XD=BETA/BETAD
C
C for a > 1 Doppler core + asymptotic Holtzmark wing with division
C point DIV
C
IF(A.GT.AL) THEN
IF(XD.LE.DIV) THEN
STARKA=SD*EXP(-XD*XD)/BETAD
ELSE
STARKA=TRHA*FAC*EXP(SLO*LOG(BETA))
END IF
ELSE
C
C empirical formula for a < 1
C
IF(BETA.LE.BL1) THEN
STARKA=SAC*FAC
ELSE IF(BETA.LT.BL2) THEN
XL=LOG(BETA)
FL=(F0*XL+F1)*XL
STARKA=F2*FAC*EXP(FL)
ELSE
STARKA=TRHA*FAC*EXP(SLO*LOG(BETA))
END IF
END IF
RETURN
END