Compute neutron flux using the analytical formulation of Sato et al. (2008)

sato_neutrons(h, Rc, s, w)

Arguments

h

atmospheric pressure (hPa)

Rc

cutoff rigidity (GV)

s

solar modulation potential

w

gravimetric fractional water content (non-dimensional)

Details

Adaption of matlab code from Lifton et al. (2014)

Lifton, N., Sato, T., & Dunai, T. J. (2014). Scaling in situ cosmogenic nuclide production rates using analytical approximations to atmospheric cosmic-ray fluxes. Earth and Planetary Science Letters, 386, 149–160. https://doi.org/10.1016/j.epsl.2013.10.052

Examples

sato_neutrons
#> function (h, Rc, s, w) 
#> {
#>     x = h * 1.019716
#>     E = 10^seq(0, 5.301, length.out = 200)
#>     scaling = data.frame(matrix(NA, nrow = length(Rc), ncol = 6))
#>     colnames(scaling) <- c("Rc", "nflux", "P3n", "P10n", "P14n", 
#>         "P26n")
#>     scaling$Rc = Rc
#>     PhiG_d = matrix(rep(0, length(Rc) * length(E)), nrow = length(Rc), 
#>         ncol = length(E))
#>     Rc[Rc < 1] = 1
#>     Et = 2.5e-08
#>     smin = 400
#>     smax = 1200
#>     a6 = 0.00018882
#>     a7 = 0.44791
#>     a8 = 0.0014361
#>     a12 = 0.014109
#>     b11min = 25.702
#>     b11max = -6.9221
#>     b12min = -0.50931
#>     b12max = 1.1336
#>     b13min = 7.465
#>     b13max = 26.961
#>     b14min = 12.313
#>     b14max = 11.746
#>     b15min = 1.0498
#>     b15max = 2.6171
#>     b21min = 0.0065143
#>     b21max = 0.0053211
#>     b22min = 3.3511e-05
#>     b22max = 8.4899e-05
#>     b23min = 0.00094415
#>     b23max = 0.0020704
#>     b24min = 12.088
#>     b24max = 11.714
#>     b25min = 2.7782
#>     b25max = 3.8051
#>     b31min = 0.98364
#>     b31max = 0.97536
#>     b32min = 0.00014964
#>     b32max = 0.00064733
#>     b33min = -0.73249
#>     b33max = -0.2275
#>     b34min = -1.4381
#>     b34max = 2.0713
#>     b35min = 2.7448
#>     b35max = 2.1689
#>     b41min = 0.0088681
#>     b41max = 0.0091435
#>     b42min = -4.3322e-05
#>     b42max = -6.4855e-05
#>     b43min = 0.017293
#>     b43max = 0.0058179
#>     b44min = -1.0836
#>     b44max = 1.0168
#>     b45min = 2.6602
#>     b45max = 2.4504
#>     b121 = 0.931
#>     b122 = 0.037
#>     b123 = -2.02
#>     b124 = 2.12
#>     b125 = 5.34
#>     b131 = 0.000667
#>     b132 = -1.19e-05
#>     b133 = 1e-04
#>     b134 = 1.45
#>     b135 = 4.29
#>     b51 = 0.00097337
#>     b52 = -9.6635e-05
#>     b53 = 0.012121
#>     b54 = 7.1726
#>     b55 = 1.4601
#>     b91 = 571.99
#>     b92 = 7.1293
#>     b93 = -107.03
#>     b94 = 1.8538
#>     b95 = 1.2142
#>     b101 = 0.00068552
#>     b102 = 2.7136e-05
#>     b103 = 0.00057823
#>     b104 = 8.8534
#>     b105 = 3.6417
#>     b111 = -0.508
#>     b112 = 0.14783
#>     b113 = 1.0068
#>     b114 = 9.1556
#>     b115 = 1.6369
#>     c1 = 0.23555
#>     c2 = 2.3779
#>     c3 = 0.72597
#>     c5 = 123.91
#>     c6 = 2.2318
#>     c7 = 0.0010791
#>     c8 = 3.6435e-12
#>     c9 = 1.6595
#>     c10 = 8.4782e-08
#>     c11 = 1.5054
#>     h31 = -25.184
#>     h32 = 2.7298
#>     h33 = 0.071526
#>     h51 = 0.3479
#>     h52 = 3.3493
#>     h53 = -1.5744
#>     g1 = -0.023499
#>     g2 = -0.012938
#>     g3 = 10^(h31 + h32/(w + h33))
#>     g4 = 0.96889
#>     g5 = h51 + h52 * w + h53 * (w^2)
#>     fG = 10^(g1 + g2 * log10(E/g3) * (1 - tanh(g4 * log10(E/g5))))
#>     h61 = 0.118
#>     h62 = 0.14438
#>     h63 = 3.8733
#>     h64 = 0.65298
#>     h65 = 42.752
#>     g6 = (h61 + h62 * exp(-h63 * w))/(1 + h64 * exp(-h65 * w))
#>     PhiT = g6 * ((E/Et)^2) * exp(-E/Et)
#>     PhiB = rep(0, length(E))
#>     PhiG = rep(0, length(E))
#>     PhiGMev = rep(0, length(E))
#>     p10n = rep(0, length(E))
#>     p14n = rep(0, length(E))
#>     p26n = rep(0, length(E))
#>     p3n = rep(0, length(E))
#>     p36Can = rep(0, length(E))
#>     p36Kn = rep(0, length(E))
#>     p36Tin = rep(0, length(E))
#>     p36Fen = rep(0, length(E))
#>     for (a in 1:length(Rc)) {
#>         a1min = b11min + b12min * Rc[a] + b13min/(1 + exp((Rc[a] - 
#>             b14min)/b15min))
#>         a1max = b11max + b12max * Rc[a] + b13max/(1 + exp((Rc[a] - 
#>             b14max)/b15max))
#>         a2min = b21min + b22min * Rc[a] + b23min/(1 + exp((Rc[a] - 
#>             b24min)/b25min))
#>         a2max = b21max + b22max * Rc[a] + b23max/(1 + exp((Rc[a] - 
#>             b24max)/b25max))
#>         a3min = b31min + b32min * Rc[a] + b33min/(1 + exp((Rc[a] - 
#>             b34min)/b35min))
#>         a3max = b31max + b32max * Rc[a] + b33max/(1 + exp((Rc[a] - 
#>             b34max)/b35max))
#>         a4min = b41min + b42min * Rc[a] + b43min/(1 + exp((Rc[a] - 
#>             b44min)/b45min))
#>         a4max = b41max + b42max * Rc[a] + b43max/(1 + exp((Rc[a] - 
#>             b44max)/b45max))
#>         a5 = b51 + b52 * Rc[a] + b53/(1 + exp((Rc[a] - b54)/b55))
#>         a9 = b91 + b92 * Rc[a] + b93/(1 + exp((Rc[a] - b94)/b95))
#>         a10 = b101 + b102 * Rc[a] + b103/(1 + exp((Rc[a] - b104)/b105))
#>         a11 = b111 + b112 * Rc[a] + b113/(1 + exp((Rc[a] - b114)/b115))
#>         b5 = b121 + b122 * Rc[a] + b123/(1 + exp((Rc[a] - b124)/b125))
#>         b6 = b131 + b132 * Rc[a] + b133/(1 + exp((Rc[a] - b134)/b135))
#>         c4 = a5 + a6 * x/(1 + a7 * exp(a8 * x))
#>         c12 = a9 * (exp(-a10 * x) + a11 * exp(-a12 * x))
#>         PhiLmin = a1min * (exp(-a2min * x) - a3min * exp(-a4min * 
#>             x))
#>         PhiLmax = a1max * (exp(-a2max * x) - a3max * exp(-a4max * 
#>             x))
#>         f3 = b5 + b6 * x
#>         f2 = (PhiLmin - PhiLmax)/(smin^f3 - smax^f3)
#>         f1 = PhiLmin - f2 * smin^f3
#>         PhiL = f1 + f2 * s[a]^f3
#>         PhiB = (c1 * (E/c2)^c3) * exp(-E/c2) + c4 * exp((-(log10(E) - 
#>             log10(c5))^2)/(2 * (log10(c6))^2)) + c7 * log10(E/c8) * 
#>             (1 + tanh(c9 * log10(E/c10))) * (1 - tanh(c11 * log10(E/c12)))
#>         PhiG = PhiL * (PhiB * fG + PhiT)
#>         PhiGMev = PhiG/E
#>         PhiG_d[a, ] = PhiG
#>         clipindex = (E >= 1)
#>         scaling$P3n[a] = (pracma::trapz(E[clipindex], PhiGMev[clipindex] * 
#>             XSectsReedyAll$OnxHe3T[clipindex]) + pracma::trapz(E[clipindex], 
#>             PhiGMev[clipindex] * XSectsReedyAll$SinxHe3T[clipindex]/2)) * 
#>             XSectsReedyAll$Natoms3 * 1e-27 * 31536000
#>         scaling$P10n[a] = (pracma::trapz(E[clipindex], PhiGMev[clipindex] * 
#>             XSectsReedyAll$O16nxBe10[clipindex]) + pracma::trapz(E[clipindex], 
#>             PhiGMev[clipindex] * XSectsReedyAll$SinxBe10[clipindex]/2)) * 
#>             XSectsReedyAll$Natoms10 * 1e-27 * 31536000
#>         scaling$P14n[a] = (pracma::trapz(E[clipindex], PhiGMev[clipindex] * 
#>             XSectsReedyAll$O16nn2pC14[clipindex]) + pracma::trapz(E[clipindex], 
#>             PhiGMev[clipindex] * XSectsReedyAll$SinxC14[clipindex]/2)) * 
#>             XSectsReedyAll$Natoms14 * 1e-27 * 31536000
#>         scaling$P26n[a] = pracma::trapz(E[clipindex], PhiGMev[clipindex] * 
#>             XSectsReedyAll$SinxAl26[clipindex]) * XSectsReedyAll$Natoms26 * 
#>             1e-27 * 31536000
#>         scaling$nflux[a] = pracma::trapz(E[clipindex], PhiGMev[clipindex])
#>     }
#>     res = list(E, PhiG_d, scaling)
#>     names(res) <- c("E", "PhiG_d", "scaling")
#>     return(res)
#> }
#> <bytecode: 0x56376ad9c9b0>
#> <environment: namespace:TCNtools>