@@ -68,17 +68,29 @@ elemental real(wp) function fang2010_spectrum(Q0_keV, E0_keV, Tn, massden_gcm3,
6868qtot = 0
6969do 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