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

147 lines
4.8 KiB
Fortran

FUNCTION SBFHE1(II,IB,FR)
C =========================
C
C Calculates photoionization cross sections of neutral helium
C from states with n = 1, 2, 3, 4.
C
C The levels are either non-averaged (l,s) states, or some
C averaged levels.
C The program allows only two standard possibilities of
C constructing averaged levels:
C i) all states within given principal quantum number n (>1) are
C lumped together
C ii) all siglet states for given n, and all triplet states for
C given n are lumped together separately (there are thus two
C explicit levels for a given n)
C
C The cross sections are calculated using appropriate averages
C of the Opacity Project cross sections, calculated by procedure
C HEPHOT
C
C Input parameters:
C II - index of the lower level (in the numbering of explicit
C levels)
C IB - photoionization switch IBF for the given transition
C = 10 - means that the given transition is from an
C averaged level
C = 11 - the given transition is from non-averaged
C singlet state
C = 13 - the given transition is from non-averaged
C triplet state
C FR - frequency
C
INCLUDE 'PARAMS.FOR'
C
NI=NQUANT(II)
IGI=INT(G(II)+0.01)
IS=IB-10
sbfhe1=0.
C
C ----------------------------------------------------------------
C IB=11 or 13 - photoionization from an non-averaged (l,s) level
C ----------------------------------------------------------------
C
IF(IS.EQ.1.OR.IS.EQ.3) THEN
IL=(IGI/IS-1)/2
SBFHE1=HEPHOT(IS,IL,NI,FR)
END IF
C
C ----------------------------------------------------------------
C IS=10 - photoionization from an averaged level
C ----------------------------------------------------------------
C
IF(IS.EQ.0) THEN
IF(NI.EQ.2) THEN
C
C ******** photoionization from an averaged level with n=2
C
IF(IGI.EQ.4) THEN
C
C a) lower level is an averaged singlet state
C
SBFHE1=(HEPHOT(1,0,2,FR)+3.D0*HEPHOT(1,1,2,FR))/9.D0
ELSE IF(IGI.EQ.12) THEN
C
C b) lower level is an averaged triplet state
C
SBFHE1=(HEPHOT(3,0,2,FR)+3.D0*HEPHOT(3,1,2,FR))/9.D0
ELSE IF(IGI.EQ.16) THEN
C
C c) lower level is an average of both singlet and triplet states
C
SBFHE1=(HEPHOT(1,0,2,FR)+3.D0*(HEPHOT(1,1,2,FR)+
* HEPHOT(3,0,2,FR))+9.D0*HEPHOT(3,1,2,FR))/1.6D1
ELSE
GO TO 10
END IF
C
C
C ******** photoionization from an averaged level with n=3
C
ELSE IF(NI.EQ.3) THEN
IF(IGI.EQ.9) THEN
C
C a) lower level is an averaged singlet state
C
SBFHE1=(HEPHOT(1,0,3,FR)+3.D0*HEPHOT(1,1,3,FR)+
* 5.D0*HEPHOT(1,2,3,FR))/9.D0
ELSE IF(IGI.EQ.27) THEN
C
C b) lower level is an averaged triplet state
C
SBFHE1=(HEPHOT(3,0,3,FR)+3.D0*HEPHOT(3,1,3,FR)+
* 5.D0*HEPHOT(3,2,3,FR))/9.D0
ELSE IF(IGI.EQ.36) THEN
C
C c) lower level is an average of both singlet and triplet states
C
SBFHE1=(HEPHOT(1,0,3,FR)+3.D0*HEPHOT(1,1,3,FR)+
* 5.D0*HEPHOT(1,2,3,FR)+
* 3.D0*HEPHOT(3,0,3,FR)+9.D0*HEPHOT(3,1,3,FR)+
* 15.D0*HEPHOT(3,2,3,FR))/3.6D0
ELSE
GO TO 10
END IF
ELSE IF(NI.EQ.4) THEN
C
C ******** photoionization from an averaged level with n=4
C
IF(IGI.EQ.16) THEN
C
C a) lower level is an averaged singlet state
C
SBFHE1=(HEPHOT(1,0,4,FR)+3.D0*HEPHOT(1,1,4,FR)+
* 5.D0*HEPHOT(1,2,4,FR)+
* 7.D0*HEPHOT(1,3,4,FR))/1.6D1
ELSE IF(IGI.EQ.48) THEN
C
C b) lower level is an averaged triplet state
C
SBFHE1=(HEPHOT(3,0,4,FR)+3.D0*HEPHOT(3,1,4,FR)+
* 5.D0*HEPHOT(3,2,4,FR)+
* 7.D0*HEPHOT(3,3,4,FR))/1.6D1
ELSE IF(IGI.EQ.64) THEN
C
C c) lower level is an average of both singlet and triplet states
C
SBFHE1=(HEPHOT(1,0,4,FR)+3.D0*HEPHOT(1,1,4,FR)+
* 5.D0*HEPHOT(1,2,4,FR)+
* 7.D0*HEPHOT(1,3,4,FR)+
* 3.D0*HEPHOT(3,0,4,FR)+
* 9.D0*HEPHOT(3,1,4,FR)+
* 15.D0*HEPHOT(3,2,4,FR)+
* 21.D0*HEPHOT(3,3,4,FR))/6.4D1
ELSE
GO TO 10
END IF
ELSE
GO TO 10
END IF
END IF
RETURN
10 WRITE(6,601) NI,IGI,IS
601 FORMAT(1H0/' INCONSISTENT INPUT TO PROCEDURE SBFHE1'/
* ' QUANTUM NUMBER =',I3,' STATISTICAL WEIGHT',I4,' S=',I3)
STOP
END