Skip to content

Commit 33fce55

Browse files
committed
improved fang 2010 integration limits
1 parent b9d9ea5 commit 33fce55

1 file changed

Lines changed: 26 additions & 16 deletions

File tree

src/ionization/fang.f90

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,29 @@ elemental real(wp) function fang2010_spectrum(Q0_keV, E0_keV, Tn, massden_gcm3,
6868
qtot = 0
6969
do k=1,lbins
7070
!! energy bin limits
71-
bin_lb = -1.0_wp ! lower limit from Fang 2008, 2010
7271
select case (diff_num_flux)
7372
case (0) ! Maxwellian
74-
bin_ub = log10(20*E0_keV) ! gives 1.12e-7 x max(phi)
73+
bin_lb = max(-1.0_wp, log10(E0_keV / 300.0_wp))
74+
bin_ub = min(3.0_wp, log10(8.0_wp * E0_keV))
75+
case (1) ! kappa distribution
76+
bin_lb = max(-1.0_wp, log10(E0_keV / 300.0_wp))
77+
bin_ub = min(3.0_wp, log10(8.0_wp * E0_keV * (kappa + 8.0_wp) / kappa))
78+
case (2) ! multiple Maxwellians
79+
bin_lb = max(-1.0_wp, log10(E0_keV / 300.0_wp))
80+
bin_ub = min(3.0_wp, log10(8.0_wp * E0_keV * bimax_frac))
7581
case (3) ! accelerated Maxwellian
76-
bin_lb = log10(E0_keV) ! minimum energy of spectrum
77-
bin_ub = log10(10*max(E0_keV, E0_char_keV))
82+
bin_lb = max(-1.0_wp, log10(E0_keV)) ! minimum energy of spectrum
83+
if (E0_keV < E0_char_keV) then
84+
bin_ub = min(3.0_wp, log10(8.0_wp * E0_char_keV))
85+
else
86+
bin_ub = min(3.0_wp, log10(6.0_wp * E0_char_keV + E0_keV))
87+
endif
7888
case (4) ! Evans, D. S. (1974) 2 keV acc., 0.8 keV temp
79-
bin_ub = log10(10*2.0_wp)
89+
bin_lb = -1.0_wp
90+
bin_ub = log10(40.0_wp)
8091
case default
81-
bin_ub = 3 ! upper limit from Fang 2008, 2010
92+
bin_lb = -1.0_wp ! lower limit from Fang 2008, 2010
93+
bin_ub = 3.0_wp ! upper limit from Fang 2008, 2010
8294
end select
8395

8496
!! log bins, midpoint rule
@@ -105,27 +117,25 @@ elemental real(wp) function fang2010_spectrum(Q0_keV, E0_keV, Tn, massden_gcm3,
105117
!! user choice of differential energy flux
106118
select case (diff_num_flux)
107119
case (0) ! Maxwellian
108-
phi_keV = (Q0_keV/(2*E0_keV**3)) * Ebin_keV * exp(-1*Ebin_keV/E0_keV) ! 1/keV/s/cm^2
120+
phi_keV = (Q0_keV/(2*E0_keV**2)) * (Ebin_keV/E0_keV) * exp(-1*Ebin_keV/E0_keV) ! 1/keV/s/cm^2
109121
case (1) ! kappa distribution
110122
if (kappa <= 2) then
111123
error stop 'ERROR:ionize_fang:fang2010_spectrum: for finite <E>, kappa must be greater than 2'
112124
end if
113-
phi_keV = (Q0_keV/(2*E0_keV**3)) * (gamma(kappa+1)/(gamma(kappa-1/2)*(kappa**(3/2)))) &
114-
* Ebin_keV * (1+Ebin_keV/(kappa*E0_keV))**(-1-1*kappa)
125+
phi_keV = (Q0_keV/(2*E0_keV**2)) * (Ebin_keV/E0_keV) * ((kappa-1)*(kappa-2)/kappa**2) * (1+Ebin_keV/E0_keV/kappa)**(-1-1*kappa)
115126
case (2) ! multiple Maxwellians
116-
if (bimax_frac <= 0) then
117-
error stop 'ERROR:ionize_fang:fang2010_spectrum: bimax_frac must be greater than 0'
127+
if (bimax_frac <= 1) then
128+
error stop 'ERROR:ionize_fang:fang2010_spectrum: bimax_frac must be greater than 1'
118129
end if
119-
phi_keV = (Q0_keV/(2*E0_keV**3)) * (Ebin_keV/bimax_frac**2) * exp(-1*Ebin_keV/(bimax_frac*E0_keV)) ! secondary Maxwellian
120-
phi_keV = phi_keV + (Q0_keV/(2*E0_keV**3)) * Ebin_keV * exp(-1*Ebin_keV/E0_keV) ! add primary Maxwellian
121-
phi_keV = phi_keV/2 ! normalize
130+
phi_keV = (Q0_keV/(2*E0_keV**2)) * (Ebin_keV/E0_keV) * (1/(1+bimax_frac**2)) &
131+
* (exp(-1*Ebin_keV/E0_keV) + (1/bimax_frac)*exp(-1*Ebin_keV/E0_keV/bimax_frac))
122132
case (3) ! accelerated Maxwellian
123133
if (E0_char_keV < 0) then
124134
error stop 'ERROR:ionize_fang:fang2010_spectrum: W0_char must be greater than 0'
125135
end if
126-
if (Ebin_keV<E0_keV) then ! no electrons with energies less than U0
136+
if (Ebin_keV<E0_keV) then ! no electrons with energies less than potential drop
127137
phi_keV = 0
128-
else ! E0_kev = acc. potential, E0_char_keV = thermal energy
138+
else ! E0_keV = acc. potential, E0_char_keV = thermal energy
129139
phi_keV = (Q0_keV/(E0_char_keV**2+(E0_char_keV+E0_keV)**2)) * (Ebin_keV/E0_char_keV) * exp(-1*(Ebin_keV-E0_keV)/E0_char_keV)
130140
end if
131141
case (4) ! Data used from Evans, D. S. (1974)

0 commit comments

Comments
 (0)