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

121 lines
3.6 KiB
Fortran

SUBROUTINE DOPGAM(ITR,ID,T,DOP,AGAM)
C ====================================
C
C Doppler width and the Voigt damping parameter for the line ITR
C
C Input:
C ITR - index of transition
C ID - depth index
C T - temperature
C Output:
C DOP - Doppler width
C AGAM - total damping parameter (in units of Doppler widths;
C ie. = gam/4pi/DOP, where gam is the "physical" damping
C parameter expresed in circular frequencies)
C
C Damping parameter is calculated only for transitions with
C |IPROF(ITR)| = 1 (ie. those for which either Voigt or some non-
C standard profile is assumed)
C Determination of AGAM:
C is controlled by input parameters transmitted by COMMON/VOIPAR:
C
C GAMAR(IP) - for > 0 - has the meaning of natural damping
C parameter (=Einstein coefficient for
C spontaneous emission)
C = 0 - classical natural damping assumed
C < 0 - damping is given by a non-standard,
C user supplied procedure GAMSP
C STARK1(IP) - = 0 - Stark broadening neglected
C < 0 - scaled classical expression
C (ie gam = -STARK1 * classical Stark)
C > 0 - Stark broadening given by
C n(el)*[STARK1*T**STARK2 + STARK3]
C STRAK2, STARK3 - see above
C VDWH(IP) - .le.0 - Van der Waals broadening neglected
C > 0 - scaled classical expression
C
C the corresponding index IP is given by ITRA(IUP(ITR),ILOW(ITR))
C
INCLUDE 'IMPLIC.FOR'
INCLUDE 'BASICS.FOR'
INCLUDE 'ATOMIC.FOR'
INCLUDE 'MODELQ.FOR'
PARAMETER (BOL2=2.76108D-16, CIN=UN/2.997925D10)
PARAMETER (R02=2.5,R12=45.,OP4=0.4,VW0=4.5E-9)
C
J=IUP(ITR)
IAT=IATM(J)
FR=FR0(ITR)
IE=IEL(J)
AM=BOL2/AMASS(IAT)*T
AGAM=0.
C
C Doppler width
C
DOP=FR*CIN*SQRT(AM+VTURBS(ID)*VTURBS(ID))
C
C -----------------
C damping parameter - only for IPROF = 1
C
IF(IABS(IPROF(ITR)).NE.1) RETURN
IP=ITRA(J,ILOW(ITR))
ANE=ELEC(ID)
C
C Natural (radiation) broadening
C
If(GAMAR(IP).GT.0.) THEN
AGAM=GAMAR(IP)
ELSE IF (GAMAR(IP).EQ.0.) THEN
AGAM=2.47342D-22*FR*FR
ELSE
C
C Non-standard expression - for the total damping parameter,
C not only for radiation damping
C
CALL GAMSP(ITR,T,ANE,AGAM)
END IF
C
C Stark broadening
C
Z=FLOAT(IZ(IE))
ANFF=Z*Z*EH/ENION(J)
IF(STARK1(IP).EQ.0.) THEN
AGAM=AGAM+1.D-8*ANFF**2.5*ANE
ELSE IF (STARK1(IP).GT.0.) THEN
AGAM=AGAM+ANE*(STARK1(IP)*T**STARK2(IP)+STARK3(IP))
END IF
C
C Van der Waals broadening
C
IF(IELH.GT.0) THEN
AH=POPUL(NFIRST(IELH),ID)
ELSE
AH=DENS(ID)/WMM(ID)/YTOT(ID)
END IF
IF(IELHE1.NE.0) THEN
AHE=AH*ABUND(IATHE,ID)
ELSE
AHE=AH*ABNDD(2,ID)
END IF
VDWC=(T*1.E-4)**0.3*(AH+0.42*AHE)
IF(VDWH(IP).GE.0.) THEN
IF(IAT.LT.21) THEN
R2=R02*(ANFF/Z)**2
ELSE IF(IAT.LT.45) then
R2=(R12-FLOAT(IAT))/Z
ELSE
R2=0.5
END IF
GW0=VDWC*VW0*R2**OP4
AGAM=AGAM+GW0
ELSE IF (VDWH(IP).LT.0.) THEN
GW0=VDWC*EXP(2.3025851*VDWH(IP))
AGAM=AGAM+GW0
END IF
c
C Total damping parameter in units of Doppler widths
C
AGAM=AGAM/DOP/12.566370614
RETURN
END