|
1
|
|
|
# coding: utf-8 |
|
2
|
|
|
# Copyright (c) 2020 Stefan Bender |
|
3
|
|
|
# |
|
4
|
|
|
# This file is part of pyeppaurora. |
|
5
|
|
|
# pyeppaurora is free software: you can redistribute it or modify |
|
6
|
|
|
# it under the terms of the GNU General Public License as published |
|
7
|
|
|
# by the Free Software Foundation, version 2. |
|
8
|
|
|
# See accompanying LICENSE file or http://www.gnu.org/licenses/gpl-2.0.html. |
|
9
|
|
|
"""Atmospheric ionization rate parametrizations |
|
10
|
|
|
|
|
11
|
|
|
Includes the atmospheric ionization rate parametrization for auroral |
|
12
|
|
|
proton precipitation [1]_. |
|
13
|
|
|
|
|
14
|
|
|
.. [1] Fang, X., Lummerzheim, D., and Jackman, C. H. (2013), |
|
15
|
|
|
Proton impact ionization and a fast calculation method, |
|
16
|
|
|
J. Geophys. Res. Space Physics, 118, 5369--5378, doi:10.1002/jgra.50484. |
|
17
|
|
|
""" |
|
18
|
|
|
|
|
19
|
|
|
import numpy as np |
|
20
|
|
|
|
|
21
|
|
|
POLY_F2013 = np.array([ |
|
22
|
|
|
[ 2.55050e+0, 2.69476e-1, -2.58425e-1, 4.43190e-2], |
|
23
|
|
|
[ 6.39287e-1, -1.85817e-1, -3.15636e-2, 1.01370e-2], |
|
24
|
|
|
[ 1.63996e+0, 2.43580e-1, 4.29873e-2, 3.77803e-2], |
|
25
|
|
|
[-2.13479e-1, 1.42464e-1, 1.55840e-2, 1.97407e-3], |
|
26
|
|
|
[-1.65764e-1, 3.39654e-1, -9.87971e-3, 4.02411e-3], |
|
27
|
|
|
[-3.59358e-2, 2.50330e-2, -3.29365e-2, 5.08057e-3], |
|
28
|
|
|
[-6.26528e-1, 1.46865e+0, 2.51853e-1, -4.57132e-2], |
|
29
|
|
|
[ 1.01384e+0, 5.94301e-2, -3.27839e-2, 3.42688e-3], |
|
30
|
|
|
[-1.29454e-6, -1.43623e-1, 2.82583e-1, 8.29809e-2], |
|
31
|
|
|
[-1.18622e-1, 1.79191e-1, 6.49171e-2, -3.99715e-3], |
|
32
|
|
|
[ 2.94890e+0, -5.75821e-1, 2.48563e-2, 8.31078e-2], |
|
33
|
|
|
[-1.89515e-1, 3.53452e-2, 7.77964e-2, -4.06034e-3] |
|
34
|
|
|
]) |
|
35
|
|
|
|
|
36
|
|
|
vpolyval = np.vectorize(np.polyval, signature='(m,n),()->(n)') |
|
37
|
|
|
|
|
38
|
|
|
|
|
39
|
|
View Code Duplication |
def fang2013_protons(energy, flux, scale_height, rho, pij=POLY_F2013): |
|
|
|
|
|
|
40
|
|
|
"""Proton ionization parametrization by Fang et al., 2013 [1]_ |
|
41
|
|
|
|
|
42
|
|
|
.. [1] Fang, X., Lummerzheim, D., and Jackman, C. H. (2013), |
|
43
|
|
|
Proton impact ionization and a fast calculation method, |
|
44
|
|
|
J. Geophys. Res. Space Physics, 118, 5369--5378, doi:10.1002/jgra.50484. |
|
45
|
|
|
""" |
|
46
|
|
|
def _f_y(_cc, _y): |
|
47
|
|
|
# Fang et al., 2008, Eq. (6), Fang et al., 2010 Eq. (4) |
|
48
|
|
|
# Fang et al., 2013, Eqs. (6), (7) |
|
49
|
|
|
_c = _cc.reshape((12, -1)) |
|
50
|
|
|
return ( |
|
51
|
|
|
_c[0] * (_y**_c[1]) * np.exp(-_c[2] * (_y**_c[3])) + |
|
52
|
|
|
_c[4] * (_y**_c[5]) * np.exp(-_c[6] * (_y**_c[7])) + |
|
53
|
|
|
_c[8] * (_y**_c[9]) * np.exp(-_c[10] * (_y**_c[11])) |
|
54
|
|
|
) |
|
55
|
|
|
# Fang et al., 2013, Eqs. (6), (7) |
|
56
|
|
|
_cs = np.exp(vpolyval(pij[:, ::-1].T, np.log(energy))).T |
|
57
|
|
|
# Fang et al., 2013, Eq. (5) |
|
58
|
|
|
y = 7.5 / energy * (1e4 * rho * scale_height)**(0.9) |
|
59
|
|
|
f_y = _f_y(_cs, y) |
|
60
|
|
|
# Fang et al., 2013, Eq. (3) |
|
61
|
|
|
en_diss = f_y * flux / scale_height |
|
62
|
|
|
return en_diss |
|
63
|
|
|
|