1 | # -*- coding: utf-8 -*- |
||
2 | import numpy as np |
||
3 | import pytest |
||
4 | |||
5 | import eppaurora as aur |
||
6 | |||
7 | EDISS_FUNCS_EXPECTED = [ |
||
8 | (aur.rr1987, 4.51517584e-07), |
||
9 | (aur.rr1987_mod, 4.75296602e-07), |
||
10 | (aur.fang2008, 4.44256875e-07), |
||
11 | (aur.fang2010_mono, 1.96516057e-007), |
||
12 | (aur.fang2010_maxw_int, 4.41340659e-07), |
||
13 | (aur.fang2013_protons, 4.09444686e-22), |
||
14 | (aur.berger1974, 1.18682805e-12), |
||
15 | ] |
||
16 | |||
17 | |||
18 | View Code Duplication | @pytest.mark.parametrize( |
|
0 ignored issues
–
show
Duplication
introduced
by
![]() |
|||
19 | "edissfunc, expected", |
||
20 | EDISS_FUNCS_EXPECTED, |
||
21 | ) |
||
22 | def test_endiss(edissfunc, expected): |
||
23 | energies = np.logspace(-1, 2, 4) |
||
24 | fluxes = np.ones_like(energies) |
||
25 | # ca. 100, 150, 200 km |
||
26 | scale_heights = np.array([6e5, 27e5, 40e5]) |
||
27 | rhos = np.array([5e-10, 1.7e-12, 2.6e-13]) |
||
28 | # energy dissipation "profiles" |
||
29 | ediss = edissfunc( |
||
30 | energies[None, :], fluxes[None, :], |
||
31 | scale_heights[:, None], rhos[:, None] |
||
32 | ) |
||
33 | assert ediss.shape == (3, 4) |
||
34 | np.testing.assert_allclose(ediss[0, 2], expected) |
||
35 | return |
||
36 | |||
37 | |||
38 | @pytest.mark.parametrize( |
||
39 | "edissfunc, expected", |
||
40 | EDISS_FUNCS_EXPECTED, |
||
41 | ) |
||
42 | def test_endiss_scalar(edissfunc, expected): |
||
43 | energies = 10. |
||
44 | fluxes = 1. |
||
45 | # ca. 100, 150, 200 km |
||
46 | scale_heights = np.array([6e5, 27e5, 40e5]) |
||
47 | rhos = np.array([5e-10, 1.7e-12, 2.6e-13]) |
||
48 | # energy dissipation "profiles" |
||
49 | ediss = edissfunc( |
||
50 | energies, fluxes, |
||
51 | scale_heights[:, None], rhos[:, None] |
||
52 | ) |
||
53 | assert ediss.shape == (3, 1) |
||
54 | np.testing.assert_allclose(ediss[0, 0], expected) |
||
55 | return |
||
56 | |||
57 | |||
58 | View Code Duplication | @pytest.mark.parametrize( |
|
0 ignored issues
–
show
|
|||
59 | "edissfunc, expected", |
||
60 | EDISS_FUNCS_EXPECTED, |
||
61 | ) |
||
62 | def test_endiss_transposed(edissfunc, expected): |
||
63 | energies = np.logspace(-1, 2, 4) |
||
64 | fluxes = np.ones_like(energies) |
||
65 | # ca. 100, 150, 200 km |
||
66 | scale_heights = np.array([6e5, 27e5, 40e5]) |
||
67 | rhos = np.array([5e-10, 1.7e-12, 2.6e-13]) |
||
68 | ediss = edissfunc( |
||
69 | energies[:, None], fluxes[:, None], |
||
70 | scale_heights[None, :], rhos[None, :] |
||
71 | ) |
||
72 | assert ediss.shape == (4, 3) |
||
73 | np.testing.assert_allclose(ediss[2, 0], expected) |
||
74 | return |
||
75 | |||
76 | |||
77 | View Code Duplication | @pytest.mark.parametrize( |
|
0 ignored issues
–
show
|
|||
78 | "edissfunc, expected", |
||
79 | EDISS_FUNCS_EXPECTED, |
||
80 | ) |
||
81 | def test_endiss_3d(edissfunc, expected): |
||
82 | energies = np.logspace(-1, 2, 4) |
||
83 | fluxes = np.ones_like(energies) |
||
84 | # ca. 100, 150, 200 km |
||
85 | scale_heights = np.array([6e5, 27e5, 40e5]) |
||
86 | rhos = np.array([5e-10, 1.7e-12, 2.6e-13]) |
||
87 | ediss = edissfunc( |
||
88 | energies[None, None, :], fluxes[None, None, :], |
||
89 | scale_heights[:, None, None], rhos[:, None, None] |
||
90 | ) |
||
91 | assert ediss.shape == (3, 1, 4) |
||
92 | np.testing.assert_allclose(ediss[0, 0, 2], expected) |
||
93 | return |
||
94 | |||
95 | |||
96 | View Code Duplication | @pytest.mark.parametrize( |
|
0 ignored issues
–
show
|
|||
97 | "edissfunc, expected", |
||
98 | EDISS_FUNCS_EXPECTED, |
||
99 | ) |
||
100 | def test_endiss_3d_transposed(edissfunc, expected): |
||
101 | energies = np.logspace(-1, 2, 4) |
||
102 | fluxes = np.ones_like(energies) |
||
103 | # ca. 100, 150, 200 km |
||
104 | scale_heights = np.array([6e5, 27e5, 40e5]) |
||
105 | rhos = np.array([5e-10, 1.7e-12, 2.6e-13]) |
||
106 | ediss = edissfunc( |
||
107 | energies[None, :, None], fluxes[None, :, None], |
||
108 | scale_heights[:, None, None], rhos[:, None, None] |
||
109 | ) |
||
110 | assert ediss.shape == (3, 4, 1) |
||
111 | np.testing.assert_allclose(ediss[0, 2, 0], expected) |
||
112 | return |
||
113 | |||
114 | |||
115 | def test_ssusi_ioniz(): |
||
116 | energies = np.logspace(-1, 2, 4) |
||
117 | fluxes = np.ones_like(energies) |
||
118 | z = np.array([100, 120, 150]) |
||
119 | # energy dissipation "profiles" |
||
120 | ediss = aur.ssusi_ioniz( |
||
121 | z[:, None], |
||
122 | energies[None, :], fluxes[None, :], |
||
123 | ) |
||
124 | assert ediss.shape == (3, 4) |
||
125 | return |
||
126 |