CORSIKA  @c8_version@
The framework to simulate particle cascades for astroparticle physics
CORSIKA7Atmospheres.hpp
1 /*
2  * (c) Copyright 2021 CORSIKA Project, corsika-project@lists.kit.edu
3  *
4  * This software is distributed under the terms of the GNU General Public
5  * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
6  * the license.
7  */
8 
9 #pragma once
10 
11 #include <corsika/media/IRefractiveIndexModel.hpp>
12 #include <corsika/media/LayeredSphericalAtmosphereBuilder.hpp>
14 #include <corsika/media/NuclearComposition.hpp>
15 
16 // for detail namespace, NoExtraModelInner, NoExtraModel and traits
17 #include <corsika/detail/media/LayeredSphericalAtmosphereBuilder.hpp>
18 
19 namespace corsika {
20 
29  enum class AtmosphereId : uint8_t {
30  LinsleyUSStd = 0,
31  MiddleEuropeJan,
32  MiddleEuropeFeb,
33  MiddleEuropeMay,
34  MiddleEuropeJun,
35  MiddleEuropeAug,
36  MiddleEuropeOct,
37  MiddleEuropeDec,
38  SouthPoleMar,
39  SouthPoleJul,
40  SouthPoleOct,
41  SouthPoleDec,
42  SouthPoleJan,
43  SouthPoleAug,
44  MalargueWinterI,
45  MalargueWinterII,
46  MalargueSpring,
47  MalargueSummer,
48  MalargueAutumn,
49  USStdBK,
50  LastAtmosphere
51  };
52 
53  namespace {
66  struct AtmosphereLayerParameters {
67  LengthType altitude;
68  GrammageType offset;
69  LengthType scaleHeight;
70  };
71 
75  typedef std::array<AtmosphereLayerParameters, 5> AtmosphereParameters;
76 
83  auto constexpr grammage(double const v) { return v * 1_g / (1_cm * 1_cm); }
84 
85  std::array<AtmosphereParameters,
86  static_cast<uint8_t>(
87  AtmosphereId::LastAtmosphere)> constexpr atmosphereParameterList{
88  {{{{4_km, grammage(1222.6562), 994186.38_cm},
89  {10_km, grammage(1144.9069), 878153.55_cm},
90  {40_km, grammage(1305.5948), 636143.04_cm},
91  {100_km, grammage(540.1778), 772170.16_cm},
92  {112.8_km, grammage(1), 1e9_cm}}},
93  {{{4_km, grammage(1173.9861), 919546_cm},
94  {10_km, grammage(1205.7625), 963267.92_cm},
95  {40_km, grammage(1386.7807), 614315_cm},
96  {100_km, grammage(555.8935), 739059.6_cm},
97  {112.8_km, grammage(1), 1e9_cm}}},
98  {{{4_km, grammage(1240.48), 933697_cm},
99  {10_km, grammage(1117.85), 765229_cm},
100  {40_km, grammage(1210.9), 636790_cm},
101  {100_km, grammage(608.2128), 733793.8_cm},
102  {112.8_km, grammage(1), 1e9_cm}}},
103  {{{4_km, grammage(1285.2782), 1088310_cm},
104  {10_km, grammage(1173.1616), 935485_cm},
105  {40_km, grammage(1320.4561), 635137_cm},
106  {100_km, grammage(680.6803), 727312.6_cm},
107  {112.8_km, grammage(1), 1e9_cm}}},
108  {{{4_km, grammage(1251.474), 1032310_cm},
109  {10_km, grammage(1173.321), 925528_cm},
110  {40_km, grammage(1307.826), 645330_cm},
111  {100_km, grammage(763.1139), 720851.4_cm},
112  {112.8_km, grammage(1), 1e9_cm}}},
113  {{{4_km, grammage(113.3362), 923077_cm},
114  {10_km, grammage(1226.5761), 1109960_cm},
115  {40_km, grammage(1382.6933), 630217_cm},
116  {100_km, grammage(685.6073), 726901.3_cm},
117  {112.8_km, grammage(1), 1e9_cm}}},
118  {{{4_km, grammage(1262.7013), 1059360_cm},
119  {10_km, grammage(1139.0249), 888814_cm},
120  {10_km, grammage(1270.2886), 639902_cm},
121  {40_km, grammage(681.4061), 727251.8_cm},
122  {112.8_km, grammage(1), 1e9_cm}}},
123  {{{4_km, grammage(1210.4), 970276_cm},
124  {10_km, grammage(1103.8629), 820946_cm},
125  {40_km, grammage(1215.3545), 639074_cm},
126  {100_km, grammage(629.7611), 731776.5_cm},
127  {112.8_km, grammage(1), 1e9_cm}}},
128  {{{4_km, grammage(1130.74), 867358_cm},
129  {10_km, grammage(1052.05), 741208_cm},
130  {40_km, grammage(1137.21), 633846_cm},
131  {100_km, grammage(442.512), 759850_cm},
132  {112.8_km, grammage(1), 5.4303203e9_cm}}},
133  {{{4_km, grammage(1183.70), 875221_cm},
134  {10_km, grammage(1108.06), 753212_cm},
135  {40_km, grammage(1424.02), 545846_cm},
136  {100_km, grammage(207.595), 793043_cm},
137  {112.8_km, grammage(1), 5.9787908e9_cm}}},
138  {{{4_km, grammage(1177.19), 861745_cm},
139  {10_km, grammage(1125.11), 765925_cm},
140  {40_km, grammage(1304.77), 581351_cm},
141  {100_km, grammage(433.823), 775155_cm},
142  {112.8_km, grammage(1), 7.4095699e9_cm}}},
143  {{{4_km, grammage(1139.99), 861913_cm},
144  {10_km, grammage(1073.82), 744955_cm},
145  {40_km, grammage(1052.96), 675928_cm},
146  {100_km, grammage(492.503), 829627_cm},
147  {112.8_km, grammage(1), 5.8587010e9_cm}}},
148  {{{2.67_km, grammage(1133.10), 861730_cm},
149  {5.33_km, grammage(1101.20), 826340_cm},
150  {8_km, grammage(1085.00), 790950_cm},
151  {100_km, grammage(1098.00), 682800_cm},
152  {112.8_km, grammage(1), 26798156e9_cm}}},
153  {{{6.67_km, grammage(1079.00), 764170_cm},
154  {13.33_km, grammage(1071.90), 699910_cm},
155  {20_km, grammage(1182.00), 635650_cm},
156  {100_km, grammage(1647.10), 551010_cm},
157  {112.8_km, grammage(1), 59.329575e9_cm}}},
158  {{{8_km, grammage(1198.5972), 945766.30_cm},
159  {18.1_km, grammage(1198.8796), 681780.12_cm},
160  {34.5_km, grammage(1419.4152), 620224.52_cm},
161  {100_km, grammage(730.6380), 728157.92_cm},
162  {112.8_km, grammage(1), 1e9_cm}}},
163  {{{8.3_km, grammage(1179.5010), 939228.66_cm},
164  {12.9_km, grammage(1172.4883), 787969.34_cm},
165  {34_km, grammage(1437.4911), 620008.53_cm},
166  {100_km, grammage(761.3281), 724585.33_cm},
167  {112.8_km, grammage(1), 1e9_cm}}},
168  {{{5.9_km, grammage(1202.8804), 977139.52_cm},
169  {12.0_km, grammage(1148.6275), 858087.01_cm},
170  {34.5_km, grammage(1432.0312), 614451.60_cm},
171  {100_km, grammage(696.42788), 730875.73_cm},
172  {112.8_km, grammage(1), 1e9_cm}}},
173  {{{9_km, grammage(1175.3347), 986169.72_cm},
174  {14.6_km, grammage(1180.3694), 793171.45_cm},
175  {33_km, grammage(1614.5404), 600120.95_cm},
176  {100_km, grammage(755.56438), 725247.87_cm},
177  {112.8_km, grammage(1), 1e9_cm}}},
178  {{{8_km, grammage(1196.9290), 985241.1_cm},
179  {13_km, grammage(1173.2537), 819245.00_cm},
180  {33.5_km, grammage(1502.1837), 611220.86_cm},
181  {100_km, grammage(750.89704), 725797.06_cm},
182  {112.8_km, grammage(1), 1e9_cm}}},
183  {{{7_km, grammage(1183.6071), 954248.34_cm},
184  {11.4_km, grammage(1143.0425), 800005.34_cm},
185  {37_km, grammage(1322.9748), 629568.93_cm},
186  {100_km, grammage(655.67307), 737521.77_cm},
187  {112.8_km, grammage(1), 1e9_cm}}}}};
188  } // namespace
189 
202  template <typename TEnvironmentInterface,
203  template <typename> typename TExtraEnv = detail::NoExtraModel,
204  typename TEnvironment, typename... TArgs>
205  void create_5layer_atmosphere(TEnvironment& env, AtmosphereId const atmId,
206  Point const& center, TArgs... args);
207 
209  static inline NuclearComposition const standardAirComposition{
210  {Code::Nitrogen, Code::Oxygen, Code::Argon}, {0.78479, .21052, 0.00469}};
211 
212 } // namespace corsika
213 
214 #include <corsika/detail/media/CORSIKA7Atmospheres.inl>
`, since they are used everywhere as integral part of the framework.
AtmosphereId
Atmosphere Ids following the CORSIKA 7 5-layered atmosphere models.
Describes the composition of matter Allowes and handles the creation of custom matter compositions...
void create_5layer_atmosphere(TEnvironment &env, AtmosphereId const atmId, Point const &center, TArgs... args)
Function to create a CORSIKA 7 5-layer atmosphere.