Skip to content

Commit 9c5ffc5

Browse files
add Nelson benchmark equations
1 parent 739ecd8 commit 9c5ffc5

File tree

1 file changed

+173
-0
lines changed

1 file changed

+173
-0
lines changed

benchmarks/AstroChem/nelson.jmd

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
---
2+
title: Nelson Work-Precision Diagrams
3+
author: Stella Offner and Chris Rackauckas
4+
---
5+
6+
```julia
7+
using OrdinaryDiffEq
8+
using Plots
9+
using Sundials
10+
using ODEInterface, ODEInterfaceDiffEq
11+
```
12+
13+
```julia
14+
T = 10
15+
Av = 2 # This is what depotic uses for visual extinction
16+
Go = 1.7 # I think despotic uses 1.7
17+
n_H = 611
18+
shield = 1
19+
20+
function Nelson_ODE(du,u,p,t)
21+
# 1: H2
22+
#= du[1] = -1.2e-17 * u[1] +
23+
n_H * (1.9e-6 * u[2] * u[3]) / (T^0.54) -
24+
n_H * 4e-16 * u[1] * u[12] -
25+
n_H * 7e-15 * u[1] * u[5] +
26+
n_H * 1.7e-9 * u[10] * u[2] +
27+
n_H * 2e-9 * u[2] * u[6] +
28+
n_H * 2e-9 * u[2] * u[14] +
29+
n_H * 8e-10 * u[2] * u[8] =#
30+
du[1] = 0
31+
32+
# 2: H3+
33+
du[2] = 1.2e-17 * u[1] +
34+
n_H * (-1.9e-6 * u[3] * u[2]) / (T^0.54) -
35+
n_H * 1.7e-9 * u[10] * u[2] -
36+
n_H * 2e-9 * u[2] * u[6] -
37+
n_H * 2e-9 * u[2] * u[14] -
38+
n_H * 8e-10 * u[2] * u[8]
39+
40+
# 3: e
41+
du[3] = n_H * (-1.4e-10 * u[3] * u[12]) / (T^0.61) -
42+
n_H * (3.8e-10 * u[13] * u[3]) / (T^0.65) -
43+
n_H * (3.3e-5 * u[11] * u[3]) / T +
44+
1.2e-17 * u[1] -
45+
n_H * (1.9e-6 * u[3] * u[2]) / (T^0.54) +
46+
6.8e-18 * u[4] -
47+
n_H * (9e-11 * u[3] * u[5]) / (T^0.64) +
48+
3e-10 * Go * exp(-3 * Av) * u[6] +
49+
n_H * 2e-9 * u[2] * u[13] ## CHECK I added this extra term from a CR ionization reaction
50+
+ 2.0e-10 * Go * exp(-1.9 * Av) * u[14] # this term was added as part of the skipped photoreaction
51+
52+
53+
# 4: He
54+
du[4] = n_H * (9e-11 * u[3] * u[5]) / (T^0.64) -
55+
6.8e-18 * u[4] +
56+
n_H * 7e-15 * u[1] * u[5] +
57+
n_H * 1.6e-9 * u[10] * u[5]
58+
#du[4] = 0
59+
60+
# 5: He+ 6.8e-18 or 1.1
61+
du[5] = 6.8e-18 * u[4] -
62+
n_H * (9e-11 * u[3] * u[5]) / (T^0.64) -
63+
n_H * 7e-15 * u[1] * u[5] -
64+
n_H * 1.6e-9 * u[10] * u[5]
65+
#u[5] = 0
66+
67+
# 6: C
68+
du[6] = n_H * (1.4e-10 * u[3] * u[12]) / (T^0.61) -
69+
n_H * 2e-9 * u[2] * u[6] -
70+
n_H * 5.8e-12 * (T^0.5) * u[9] * u[6] +
71+
1e-9 * Go * exp(-1.5 * Av) * u[7] -
72+
3e-10 * Go * exp(-3 * Av) * u[6] +
73+
1e-10 * Go * exp(-3 * Av) * u[10] * shield
74+
75+
# 7: CHx
76+
du[7] = n_H * (-2e-10) * u[7] * u[8] +
77+
n_H * 4e-16 * u[1] * u[12] +
78+
n_H * 2e-9 * u[2] * u[6] -
79+
1e-9 * Go * u[7] * exp(-1.5 * Av)
80+
81+
# 8: O
82+
du[8] = n_H * (-2e-10) * u[7] * u[8] +
83+
n_H * 1.6e-9 * u[10] * u[5] -
84+
n_H * 8e-10 * u[2] * u[8] +
85+
5e-10 * Go * exp(-1.7 * Av) * u[9] +
86+
1e-10 * Go * exp(-3 * Av) * u[10] * shield
87+
88+
# 9: OHx
89+
du[9] = n_H * (-1e-9) * u[9] * u[12] +
90+
n_H * 8e-10 * u[2] * u[8] -
91+
n_H * 5.8e-12 * (T^0.5) * u[9] * u[6] -
92+
5e-10 * Go * exp(-1.7 * Av) * u[9]
93+
94+
# 10: CO
95+
du[10] = n_H * (3.3e-5 * u[11] * u[3]) / T +
96+
n_H * 2e-10 * u[7] * u[8] -
97+
n_H * 1.7e-9 * u[10] * u[2] -
98+
n_H * 1.6e-9 * u[10] * u[5] +
99+
n_H * 5.8e-12 * (T^0.5) * u[9] * u[6] -
100+
1e-10 * Go * exp(-3 * Av) * u[10] +
101+
1.5e-10 * Go * exp(-2.5 * Av) * u[11] * shield
102+
103+
# 11: HCO+
104+
du[11] = n_H * (-3.3e-5 * u[11] * u[3]) / T +
105+
n_H * 1e-9 * u[9] * u[12] +
106+
n_H * 1.7e-9 * u[10] * u[2] -
107+
1.5e-10 * Go * exp(-2.5 * Av) * u[11]
108+
109+
# 12: C+
110+
du[12] = n_H * (-1.4e-10 * u[3] * u[12]) / (T^0.61) -
111+
n_H * 4e-16 * u[1] * u[12] -
112+
n_H * 1e-9 * u[9] * u[12] +
113+
n_H * 1.6e-9 * u[10] * u[5] +
114+
3e-10 * Go * exp(-3 * Av) * u[6]
115+
116+
# 13: M+
117+
du[13] = n_H * (-3.8e-10 * u[13] * u[3]) / (T^0.65) +
118+
n_H * 2e-9 * u[2] * u[14]
119+
+ 2.0e-10 * Go * exp(-1.9 * Av) * u[14] # this term was added as part of the skipped photoreaction
120+
121+
# 14: M
122+
du[14] = n_H * (3.8e-10 * u[13] * u[3]) / (T^0.65) -
123+
n_H * 2e-9 * u[2] * u[14]
124+
- 2.0e-10 * Go * exp(-1.9 * Av) * u[14] # this term was added as part of the skipped photoreaction
125+
126+
end
127+
128+
129+
u0 = [0.5 ; # 1: H2 yep?
130+
9.059e-9 ; # 2: H3+ yep
131+
2.0e-4 ; # 3: e yep
132+
0.1 ; # 4: He SEE lines 535 NL99
133+
7.866e-7 ; # 5: He+ yep? should be 2.622e-5
134+
0.0 ; # 6: C yep
135+
0.0 ; # 7: CHx yep
136+
0.0004 ; # 8: O yep
137+
0.0 ; # 9: OHx yep
138+
0.0 ; # 10: CO yep
139+
0.0 ; # 11: HCO+ yep
140+
0.0002 ; # 12: C+ yep
141+
2.0e-7 ; # 13: M+ yep
142+
2.0e-7 ] # 14: M yep
143+
144+
145+
tspan = (0.0, 30 * 3.16e10) # ~30 thousand yrs
146+
147+
prob = ODEProblem(Nelson_ODE, u0, tspan)
148+
refsol = solve(prob, Vern9(), abstol=1e-14, reltol=1e-14)
149+
150+
using Plots
151+
plot(sol; yscale=:log10, idxs = (0,5))
152+
```
153+
154+
## Run Benchmark
155+
156+
```julia
157+
abstols = 1.0 ./ 10.0 .^ (8:10)
158+
reltols = 1.0 ./ 10.0 .^ (8:10)
159+
160+
sol = solve(prob, DP8(), abstol=1e-8, reltol=1e-8)
161+
162+
163+
setups = [Dict(:alg=>DP8())
164+
Dict(:alg=>Vern7())
165+
Dict(:alg=>CVODE_Adams())
166+
Dict(:alg=>ARKODE(Sundials.Explicit(),order=6))
167+
Dict(:alg=>lsoda())
168+
Dict(:alg=>odex())
169+
Dict(:alg=>ddeabm())
170+
]
171+
wp = WorkPrecisionSet(prob,abstols,reltols,setups;appxsol=refsol,save_everystep=false, print_names = true)
172+
plot(wp)
173+
```

0 commit comments

Comments
 (0)