1 //! \file constants.h 2 //! A collection of constants 3 4 #ifndef OPENMC_CONSTANTS_H 5 #define OPENMC_CONSTANTS_H 6 7 #include <cmath> 8 #include <limits> 9 10 #include "openmc/array.h" 11 #include "openmc/vector.h" 12 #include "openmc/version.h" 13 14 namespace openmc { 15 16 using double_2dvec = vector<vector<double>>; 17 using double_3dvec = vector<vector<vector<double>>>; 18 using double_4dvec = vector<vector<vector<vector<double>>>>; 19 20 // ============================================================================ 21 // VERSIONING NUMBERS 22 23 // HDF5 data format 24 constexpr int HDF5_VERSION[] {3, 0}; 25 26 // Version numbers for binary files 27 constexpr array<int, 2> VERSION_STATEPOINT {17, 0}; 28 constexpr array<int, 2> VERSION_PARTICLE_RESTART {2, 0}; 29 constexpr array<int, 2> VERSION_TRACK {2, 0}; 30 constexpr array<int, 2> VERSION_SUMMARY {6, 0}; 31 constexpr array<int, 2> VERSION_VOLUME {1, 0}; 32 constexpr array<int, 2> VERSION_VOXEL {2, 0}; 33 constexpr array<int, 2> VERSION_MGXS_LIBRARY {1, 0}; 34 35 // ============================================================================ 36 // ADJUSTABLE PARAMETERS 37 38 // NOTE: This is the only section of the constants module that should ever be 39 // adjusted. Modifying constants in other sections may cause the code to fail. 40 41 // Monoatomic ideal-gas scattering treatment threshold 42 constexpr double FREE_GAS_THRESHOLD {400.0}; 43 44 // Significance level for confidence intervals 45 constexpr double CONFIDENCE_LEVEL {0.95}; 46 47 // Used for surface current tallies 48 constexpr double TINY_BIT {1e-8}; 49 50 // User for precision in geometry 51 constexpr double FP_PRECISION {1e-14}; 52 constexpr double FP_REL_PRECISION {1e-5}; 53 constexpr double FP_COINCIDENT {1e-12}; 54 55 // Maximum number of collisions/crossings 56 constexpr int MAX_EVENTS {1000000}; 57 constexpr int MAX_SAMPLE {100000}; 58 59 // Maximum number of words in a single line, length of line, and length of 60 // single word 61 constexpr int MAX_LINE_LEN {250}; 62 constexpr int MAX_WORD_LEN {150}; 63 64 // Maximum number of external source spatial resamples to encounter before an 65 // error is thrown. 66 constexpr int EXTSRC_REJECT_THRESHOLD {10000}; 67 constexpr double EXTSRC_REJECT_FRACTION {0.05}; 68 69 // ============================================================================ 70 // MATH AND PHYSICAL CONSTANTS 71 72 // TODO: replace with <numbers> when we go for C++20 73 constexpr double PI {3.141592653589793238462643383279502884L}; 74 const double SQRT_PI {std::sqrt(PI)}; 75 constexpr double INFTY {std::numeric_limits<double>::max()}; 76 77 // Values here are from the Committee on Data for Science and Technology 78 // (CODATA) 2018 recommendation (https://physics.nist.gov/cuu/Constants/). 79 80 // Physical constants 81 constexpr double MASS_NEUTRON {1.00866491595}; // mass of a neutron in amu 82 constexpr double MASS_NEUTRON_EV {939.56542052e6}; // mass of a neutron in eV/c^2 83 constexpr double MASS_PROTON {1.007276466621}; // mass of a proton in amu 84 constexpr double MASS_ELECTRON_EV {0.51099895000e6}; // electron mass energy equivalent in eV/c^2 85 constexpr double FINE_STRUCTURE {137.035999084}; // inverse fine structure constant 86 constexpr double PLANCK_C {1.2398419839593942e4}; // Planck's constant times c in eV-Angstroms 87 constexpr double AMU {1.66053906660e-27}; // 1 amu in kg 88 constexpr double C_LIGHT {2.99792458e8}; // speed of light in m/s 89 constexpr double N_AVOGADRO {0.602214076}; // Avogadro's number in 10^24/mol 90 constexpr double K_BOLTZMANN {8.617333262e-5}; // Boltzmann constant in eV/K 91 92 // Electron subshell labels 93 constexpr array<const char*, 39> SUBSHELLS = {"K", "L1", "L2", "L3", "M1", "M2", 94 "M3", "M4", "M5", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "O1", "O2", "O3", 95 "O4", "O5", "O6", "O7", "O8", "O9", "P1", "P2", "P3", "P4", "P5", "P6", "P7", 96 "P8", "P9", "P10", "P11", "Q1", "Q2", "Q3"}; 97 98 // Void material and nuclide 99 // TODO: refactor and remove 100 constexpr int MATERIAL_VOID {-1}; 101 constexpr int NUCLIDE_NONE {-1}; 102 103 // ============================================================================ 104 // CROSS SECTION RELATED CONSTANTS 105 106 // Temperature treatment method 107 enum class TemperatureMethod { 108 NEAREST, 109 INTERPOLATION 110 }; 111 112 // Reaction types 113 enum ReactionType { 114 REACTION_NONE = 0, 115 TOTAL_XS = 1, 116 ELASTIC = 2, 117 N_NONELASTIC = 3, 118 N_LEVEL = 4, 119 MISC = 5, 120 N_2ND = 11, 121 N_2N = 16, 122 N_3N = 17, 123 N_FISSION = 18, 124 N_F = 19, 125 N_NF = 20, 126 N_2NF = 21, 127 N_NA = 22, 128 N_N3A = 23, 129 N_2NA = 24, 130 N_3NA = 25, 131 N_NP = 28, 132 N_N2A = 29, 133 N_2N2A = 30, 134 N_ND = 32, 135 N_NT = 33, 136 N_N3HE = 34, 137 N_ND2A = 35, 138 N_NT2A = 36, 139 N_4N = 37, 140 N_3NF = 38, 141 N_2NP = 41, 142 N_3NP = 42, 143 N_N2P = 44, 144 N_NPA = 45, 145 N_N1 = 51, 146 N_N40 = 90, 147 N_NC = 91, 148 N_DISAPPEAR = 101, 149 N_GAMMA = 102, 150 N_P = 103, 151 N_D = 104, 152 N_T = 105, 153 N_3HE = 106, 154 N_A = 107, 155 N_2A = 108, 156 N_3A = 109, 157 N_2P = 111, 158 N_PA = 112, 159 N_T2A = 113, 160 N_D2A = 114, 161 N_PD = 115, 162 N_PT = 116, 163 N_DA = 117, 164 N_5N = 152, 165 N_6N = 153, 166 N_2NT = 154, 167 N_TA = 155, 168 N_4NP = 156, 169 N_3ND = 157, 170 N_NDA = 158, 171 N_2NPA = 159, 172 N_7N = 160, 173 N_8N = 161, 174 N_5NP = 162, 175 N_6NP = 163, 176 N_7NP = 164, 177 N_4NA = 165, 178 N_5NA = 166, 179 N_6NA = 167, 180 N_7NA = 168, 181 N_4ND = 169, 182 N_5ND = 170, 183 N_6ND = 171, 184 N_3NT = 172, 185 N_4NT = 173, 186 N_5NT = 174, 187 N_6NT = 175, 188 N_2N3HE = 176, 189 N_3N3HE = 177, 190 N_4N3HE = 178, 191 N_3N2P = 179, 192 N_3N2A = 180, 193 N_3NPA = 181, 194 N_DT = 182, 195 N_NPD = 183, 196 N_NPT = 184, 197 N_NDT = 185, 198 N_NP3HE = 186, 199 N_ND3HE = 187, 200 N_NT3HE = 188, 201 N_NTA = 189, 202 N_2N2P = 190, 203 N_P3HE = 191, 204 N_D3HE = 192, 205 N_3HEA = 193, 206 N_4N2P = 194, 207 N_4N2A = 195, 208 N_4NPA = 196, 209 N_3P = 197, 210 N_N3P = 198, 211 N_3N2PA = 199, 212 N_5N2P = 200, 213 N_XP = 203, 214 N_XD = 204, 215 N_XT = 205, 216 N_X3HE = 206, 217 N_XA = 207, 218 HEATING = 301, 219 DAMAGE_ENERGY = 444, 220 COHERENT = 502, 221 INCOHERENT = 504, 222 PAIR_PROD_ELEC = 515, 223 PAIR_PROD = 516, 224 PAIR_PROD_NUC = 517, 225 PHOTOELECTRIC = 522, 226 N_P0 = 600, 227 N_PC = 649, 228 N_D0 = 650, 229 N_DC = 699, 230 N_T0 = 700, 231 N_TC = 749, 232 N_3HE0 = 750, 233 N_3HEC = 799, 234 N_A0 = 800, 235 N_AC = 849, 236 N_2N0 = 875, 237 N_2NC = 891, 238 HEATING_LOCAL = 901 239 }; 240 241 constexpr array<int, 6> DEPLETION_RX {N_GAMMA, N_P, N_A, N_2N, N_3N, N_4N}; 242 243 enum class URRTableParam { 244 CUM_PROB, 245 TOTAL, 246 ELASTIC, 247 FISSION, 248 N_GAMMA, 249 HEATING 250 }; 251 252 // Maximum number of partial fission reactions 253 constexpr int PARTIAL_FISSION_MAX {4}; 254 255 // Resonance elastic scattering methods 256 enum class ResScatMethod { 257 rvs, // Relative velocity sampling 258 dbrc, // Doppler broadening rejection correction 259 cxs // Constant cross section 260 }; 261 262 enum class ElectronTreatment { 263 LED, // Local Energy Deposition 264 TTB // Thick Target Bremsstrahlung 265 }; 266 267 // ============================================================================ 268 // MULTIGROUP RELATED 269 270 // Flag to denote this was a macroscopic data object 271 constexpr double MACROSCOPIC_AWR {-2.}; 272 273 // Number of mu bins to use when converting Legendres to tabular type 274 constexpr int DEFAULT_NMU {33}; 275 276 // Mgxs::get_xs enumerated types 277 enum class MgxsType { 278 TOTAL, 279 ABSORPTION, 280 INVERSE_VELOCITY, 281 DECAY_RATE, 282 NU_SCATTER, 283 SCATTER, 284 NU_SCATTER_FMU, 285 SCATTER_FMU, 286 FISSION, 287 KAPPA_FISSION, 288 PROMPT_NU_FISSION, 289 DELAYED_NU_FISSION, 290 NU_FISSION, 291 CHI_PROMPT, 292 CHI_DELAYED 293 }; 294 295 // ============================================================================ 296 // TALLY-RELATED CONSTANTS 297 298 enum class TallyResult { 299 VALUE, 300 SUM, 301 SUM_SQ 302 }; 303 304 enum class TallyType { 305 VOLUME, 306 MESH_SURFACE, 307 SURFACE 308 }; 309 310 enum class TallyEstimator { 311 ANALOG, 312 TRACKLENGTH, 313 COLLISION 314 }; 315 316 enum class TallyEvent { 317 SURFACE, 318 LATTICE, 319 KILL, 320 SCATTER, 321 ABSORB 322 }; 323 324 // Tally score type -- if you change these, make sure you also update the 325 // _SCORES dictionary in openmc/capi/tally.py 326 // 327 // These are kept as a normal enum and made negative, since variables which 328 // store one of these enum values usually also may be responsible for storing 329 // MT numbers from the long enum above. 330 enum TallyScore { 331 SCORE_FLUX = -1, // flux 332 SCORE_TOTAL = -2, // total reaction rate 333 SCORE_SCATTER = -3, // scattering rate 334 SCORE_NU_SCATTER = -4, // scattering production rate 335 SCORE_ABSORPTION = -5, // absorption rate 336 SCORE_FISSION = -6, // fission rate 337 SCORE_NU_FISSION = -7, // neutron production rate 338 SCORE_KAPPA_FISSION = -8, // fission energy production rate 339 SCORE_CURRENT = -9, // current 340 SCORE_EVENTS = -10, // number of events 341 SCORE_DELAYED_NU_FISSION = -11, // delayed neutron production rate 342 SCORE_PROMPT_NU_FISSION = -12, // prompt neutron production rate 343 SCORE_INVERSE_VELOCITY = -13, // flux-weighted inverse velocity 344 SCORE_FISS_Q_PROMPT = -14, // prompt fission Q-value 345 SCORE_FISS_Q_RECOV = -15, // recoverable fission Q-value 346 SCORE_DECAY_RATE = -16 // delayed neutron precursor decay rate 347 }; 348 349 // Global tally parameters 350 constexpr int N_GLOBAL_TALLIES {4}; 351 enum class GlobalTally { 352 K_COLLISION, 353 K_ABSORPTION, 354 K_TRACKLENGTH, 355 LEAKAGE 356 }; 357 358 // Miscellaneous 359 constexpr int C_NONE {-1}; 360 constexpr int F90_NONE {0}; //TODO: replace usage of this with C_NONE 361 362 // Interpolation rules 363 enum class Interpolation { 364 histogram = 1, lin_lin = 2, lin_log = 3, log_lin = 4, log_log = 5 365 }; 366 367 enum class RunMode { 368 UNSET, // default value, OpenMC throws error if left to this 369 FIXED_SOURCE, 370 EIGENVALUE, 371 PLOTTING, 372 PARTICLE, 373 VOLUME 374 }; 375 376 // ============================================================================ 377 // CMFD CONSTANTS 378 379 // For non-accelerated regions on coarse mesh overlay 380 constexpr int CMFD_NOACCEL {-1}; 381 382 } // namespace openmc 383 384 #endif // OPENMC_CONSTANTS_H 385