Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
MCGIDI_misc.cc
Go to the documentation of this file.
1/*
2# <<BEGIN-copyright>>
3# Copyright 2019, Lawrence Livermore National Security, LLC.
4# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus).
5# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT).
6# SPDX-License-Identifier: MIT
7# <<END-copyright>>
8*/
9
10#include "MCGIDI.hpp"
11
12namespace MCGIDI {
13
14/*! \class SetupInfo
15 * This class is used internally when constructing a Protare to pass internal information to other constructors.
16 */
17
18/* *********************************************************************************************************//**
19 ***********************************************************************************************************/
20
21LUPI_HOST SetupInfo::SetupInfo( ProtareSingle &a_protare, GIDI::ProtareSingle const &a_GIDI_protare, PoPI::Database const &a_popsUser,
22 PoPI::Database const &a_pops ) :
23 m_protare( a_protare ),
24 m_GIDI_protare( a_GIDI_protare ),
25 m_popsUser( a_popsUser ),
26 m_pops( a_pops ),
27 m_neutronIndex( MCGIDI_popsIndex( a_popsUser, PoPI::IDs::neutron ) ),
28 m_photonIndex( MCGIDI_popsIndex( a_popsUser, PoPI::IDs::photon ) ),
30 m_GRIN_continuumGammas( nullptr ) {
31
32}
33
34/* *********************************************************************************************************//**
35 ***********************************************************************************************************/
36
38
39 for( auto iter = m_ACE_URR_probabilityTablesFromGIDI.begin( ); iter != m_ACE_URR_probabilityTablesFromGIDI.end( ); ++iter ) delete (*iter).second;
40}
41
42/* *********************************************************************************************************//**
43 * This function returns the intid for particle *a_id* or -1 if *a_id* not in *a_pops*.
44 *
45 * @param a_pops [in] A PoPI::Database to retrived the particle's intid from.
46 * @param a_id [in] The GNDS PoPs id of the particle whose intid is requested.
47 *
48 * @return The *intid*.
49 ***********************************************************************************************************/
50
51LUPI_HOST int MCGIDI_popsIntid( PoPI::Database const &a_pops, std::string const &a_id ) {
52
55 int intid = a_pops.intid( a_id );
56
57 if( intid < 0 ) {
58 if( a_id == PoPI::IDs::neutron ) {
59 intid = PoPI::Intids::neutron; }
60 else if( a_id == PoPI::IDs::photon ) {
61 intid = PoPI::Intids::photon ; }
62 else {
63 PoPI::ParseIdInfo parseIdInfo( a_id );
64 if( parseIdInfo.isSupported( ) ) {
65 if( parseIdInfo.isNuclear( ) ) {
66 intid = 1000 * parseIdInfo.Z( ) + parseIdInfo.A( );
67 }
68 }
69 }
70 }
71 return( intid );
72}
73
74/* *********************************************************************************************************//**
75 * This function returns the index in *a_pops* for particle *a_id* or -1 if *a_id* not in *a_pops*.
76 *
77 * @param a_pops [in] A PoPI::Database to retrived the particle's index from.
78 * @param a_id [in] The GNDS PoPs id of the particle whose index is requested.
79 *
80 * @return The *index*.
81 ***********************************************************************************************************/
82
83LUPI_HOST int MCGIDI_popsIndex( PoPI::Database const &a_pops, std::string const &a_id ) {
84
85 if( !a_pops.exists( a_id ) ) return( -1 );
86
87 return( static_cast<int>( a_pops[a_id] ) );
88}
89
90/* *********************************************************************************************************//**
91 * @param a_vector [in] The GIDI::Vector whose contents are coped to a MCGIGI::Vector.
92 *
93 * @return The MCGIGI::Vector.
94 ***********************************************************************************************************/
95
96
98
99 Vector<double> vector( a_vector.size( ) );
100
101 for( std::size_t i1 = 0; i1 < a_vector.size( ); ++i1 ) vector[i1] = a_vector[i1];
102
103 return( vector );
104}
105
106/* *********************************************************************************************************//**
107 * Adds the items in Vector *a_from* to the set *a_to*.
108 *
109 * @param a_to [in] The list of ints to add to the set.
110 * @param a_from [in] The set to add the ints to.
111 ***********************************************************************************************************/
112
113LUPI_HOST void addVectorItemsToSet( Vector<int> const &a_from, std::set<int> &a_to ) {
114
115 for( Vector<int>::const_iterator iter = a_from.begin( ); iter != a_from.end( ); ++iter ) a_to.insert( *iter );
116}
117
118/* *********************************************************************************************************//**
119 * This function returns a particle kinetic energy from its mass and beta (i.e., v/c) using a relativistic formula.
120 *
121 * @param a_mass_unitOfEnergy [in] The particle's mass in units of energy.
122 * @param a_particleBeta [in] The particle's velocity divided by the speed of light (i.e., beta = v/c).
123 *
124 * @return The relativistic kinetic energy of the particle.
125 ***********************************************************************************************************/
126
127LUPI_HOST_DEVICE double particleKineticEnergy( double a_mass_unitOfEnergy, double a_particleBeta ) {
128
129 if( a_particleBeta < 1e-4 ) return( 0.5 * a_mass_unitOfEnergy * a_particleBeta * a_particleBeta );
130
131 return( a_mass_unitOfEnergy * ( 1.0 / sqrt( 1.0 - a_particleBeta * a_particleBeta ) - 1.0 ) );
132}
133
134
135/* *********************************************************************************************************//**
136 * This function is like particleKineticEnergy except that *a_particleBeta2* is beta squared (i.e., (v/c)^2).
137 *
138 * @param a_mass_unitOfEnergy [in] The particle's mass in units of energy.
139 * @param a_particleBeta2 [in] The square of beta (i.e., beta^2 where beta = v/c).
140 *
141 * @return The relativistic kinetic energy of the particle.
142 ***********************************************************************************************************/
143
144LUPI_HOST_DEVICE double particleKineticEnergyFromBeta2( double a_mass_unitOfEnergy, double a_particleBeta2 ) {
145
146 if( a_particleBeta2 < 1e-8 ) return( 0.5 * a_mass_unitOfEnergy * a_particleBeta2 );
147
148 return( a_mass_unitOfEnergy * ( 1.0 / sqrt( 1.0 - a_particleBeta2 ) - 1.0 ) );
149}
150
151/* *********************************************************************************************************//**
152 * This function returns the boost speed required to boost to the center-of-mass for a projectile hitting a target.
153 *
154 * @param a_massProjectile [in] The mass of the projectile in energy units.
155 * @param a_kineticEnergyProjectile [in] The kinetic energy of the projectile.
156 * @param a_massTarget [in] The mass of the target in energy units.
157 *
158 * @return The relativistic kinetic energy of the particle.
159 ***********************************************************************************************************/
160
161LUPI_HOST_DEVICE double boostSpeed( double a_massProjectile, double a_kineticEnergyProjectile, double a_massTarget ) {
162
163 double betaProjectile = MCGIDI_particleBeta( a_massProjectile, a_kineticEnergyProjectile );
164
165 return( betaProjectile / ( 1.0 + a_massTarget / ( a_massProjectile + a_kineticEnergyProjectile ) ) );
166}
167
168/* *********************************************************************************************************//**
169 * This function determines the mu value(s) in the center-of-mass frame for a specified mu value in the lab frame for a
170 * product with speed *a_productBeta* and a boost speed of *a_productBeta*. The returned value is the number of mu values
171 * in the center-of-mass frame. The return value can be 0, 1 or 2. *a_muMinus* and *a_JacobianMinus* are undefined when the
172 * returned value is less than 2. *a_muPlus* and *a_JacobianPlus* are undefined when the returned value is 0.
173 *
174 * @param a_muLab [in] The mu specified mu value in the lab frame.
175 * @param a_boostBeta [in] The boost speed from the lab from to the center-of-mass frame in units of the speed-of-light.
176 * @param a_productBeta [in] The speed of the product in the center-of-mass frame in units of the speed-of-light.
177 * @param a_muPlus [in] The first mu value if the returned is greater than 0.
178 * @param a_JacobianPlus [in] The partial derivative of mu_com with respect to mu_lab at a_muPlus.
179 * @param a_muMinus [in] The second mu value if the returned value is 2.
180 * @param a_JacobianMinus [in] The partial derivative of mu_com with respect to mu_lab at a_muMinus.
181 *
182 * @return The number of returned center-of-mass frame mu values. Can be 0, 1 or 2.
183 ***********************************************************************************************************/
184
185LUPI_HOST_DEVICE int muCOM_From_muLab( double a_muLab, double a_boostBeta, double a_productBeta, double &a_muPlus, double &a_JacobianPlus,
186 double &a_muMinus, double &a_JacobianMinus ) {
187
188 int numberOfSolutions = 0;
189 double boostBeta2 = a_boostBeta * a_boostBeta;
190 double productBeta2 = a_productBeta * a_productBeta;
191 double muLab2 = a_muLab * a_muLab;
192 double oneMinusMuLab2 = 1.0 - muLab2;
193 double oneMinusBoostBeta2 = 1.0 - boostBeta2;
194 double oneMinusBoostBeta2MuLab2 = 1.0 - boostBeta2 * muLab2;
195
196 a_muPlus = a_muLab; // Handles case when a_productBeta is 0.0 or a_muLab is +/-1.0. Actually, when a_productBeta is 0.0 it is not defined.
197 a_muMinus = 0.0;
198
199 if( ( a_productBeta == 0.0 ) || ( a_muLab == 1.0 ) ) return( 1 );
200
201 if( a_productBeta >= a_boostBeta ) { // Intentionally treating case where a_productBeta == a_boostBeta as one solution even though is it
202 numberOfSolutions = 1; }
203 else {
204 if( a_muLab > 0.0 ) { // Only have solutions for positive mu. The next expression only test mu^2 and therefore treats negative mu like positive mu.
205 if( productBeta2 * oneMinusBoostBeta2MuLab2 > boostBeta2 * oneMinusMuLab2 ) numberOfSolutions = 2; // This ignores the case for numberOfSolutions = 1 as it probabily will never happen.
206 }
207 }
208
209 if( numberOfSolutions == 0 ) return( 0 );
210
211 double sqrt_b2minus4ac = sqrt( oneMinusBoostBeta2 * ( productBeta2 * oneMinusBoostBeta2MuLab2 - boostBeta2 * oneMinusMuLab2 ) );
212 double minusbTerm = a_boostBeta * oneMinusMuLab2;
213 double inv2a = 1.0 / ( a_productBeta * oneMinusBoostBeta2MuLab2 );
214
215 a_muPlus = ( a_muLab * sqrt_b2minus4ac - minusbTerm ) * inv2a;
216 a_muMinus = ( -a_muLab * sqrt_b2minus4ac - minusbTerm ) * inv2a; // This is meaningless when numberOfSolutions is not 1, but why add an if test.
217
218 double JacobianTerm1 = 2.0 * boostBeta2 * a_muLab / oneMinusBoostBeta2MuLab2;
219 double JacobianTerm2 = 2.0 * a_muLab * a_boostBeta / ( a_productBeta * oneMinusBoostBeta2MuLab2 );
220 double JacobianTerm3 = productBeta2 * ( 1.0 - 2.0 * boostBeta2 * muLab2 ) - boostBeta2 * ( 1.0 - 2.0 * muLab2 );
221 JacobianTerm3 *= oneMinusBoostBeta2 / ( a_productBeta * oneMinusBoostBeta2MuLab2 * sqrt_b2minus4ac );
222
223 a_JacobianPlus = fabs( a_muPlus * JacobianTerm1 + JacobianTerm2 + JacobianTerm3 );
224 a_JacobianMinus = fabs( a_muMinus * JacobianTerm1 + JacobianTerm2 - JacobianTerm3 );
225
226 return( numberOfSolutions );
227}
228
229/* *********************************************************************************************************//**
230 * This function returns a unique integer for the **Distributions::Type**. For internal use when broadcasting a
231 * distribution for MPI and GPUs needs.
232 *
233 * @param a_type [in] The distribution's type.
234 *
235 * @return Returns a unique integer for the distribution type.
236 ***********************************************************************************************************/
237
239
240 int distributionType = 0;
241
242 switch( a_type ) {
244 distributionType = 0;
245 break;
247 distributionType = 1;
248 break;
250 distributionType = 2;
251 break;
253 distributionType = 3;
254 break;
256 distributionType = 4;
257 break;
259 distributionType = 5;
260 break;
262 distributionType = 6;
263 break;
265 distributionType = 7;
266 break;
268 distributionType = 8;
269 break;
271 distributionType = 9;
272 break;
274 distributionType = 10;
275 break;
277 distributionType = 11;
278 break;
280 distributionType = 12;
281 break;
283 distributionType = 13;
284 break;
286 distributionType = 14;
287 break;
288 }
289
290 return( distributionType );
291}
292
293/* *********************************************************************************************************//**
294 * This function returns the **Distributions::Type** corresponding to the integer returned by **distributionTypeToInt**.
295 *
296 * @param a_type [in] The value returned by **distributionTypeToInt**.
297 *
298 * @return The **Distributions::Type** corresponding to *a_type*.
299 ***********************************************************************************************************/
300
302
304
305 switch( a_type ) {
306 case 0 :
308 break;
309 case 1 :
311 break;
312 case 2 :
314 break;
315 case 3 :
317 break;
318 case 4 :
320 break;
321 case 5 :
323 break;
324 case 6 :
326 break;
327 case 7 :
329 break;
330 case 8 :
332 break;
333 case 9 :
335 break;
336 case 10 :
338 break;
339 case 11 :
341 break;
342 case 12 :
344 break;
345 case 13 :
347 break;
348 case 14 :
350 break;
351 default:
352 LUPI_THROW( "intToDistributionType: unsupported distribution type." );
353 }
354
355 return( type );
356}
357
358/* *********************************************************************************************************//**
359 * This method serializes *a_products* for broadcasting as needed for MPI and GPUs. The method can count the number of required
360 * bytes, pack *a_products* or unpack *a_products* depending on *a_mode*.
361 *
362 * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*.
363 * @param a_mode [in] Specifies the action of this method.
364 * @param a_products [in] The products to serialize.
365 ***********************************************************************************************************/
366
368
369 std::size_t vectorSize = a_products.size( );
370 int vectorSizeInt = (int) vectorSize;
371 DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode );
372 vectorSize = (std::size_t) vectorSizeInt;
373
374 if( a_mode == LUPI::DataBuffer::Mode::Unpack ) {
375 a_products.resize( vectorSize, &a_buffer.m_placement );
376 for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) {
377 if( a_buffer.m_placement != nullptr ) {
378 a_products[vectorIndex] = new(a_buffer.m_placement) Product;
379 a_buffer.incrementPlacement( sizeof( Product ) );
380 }
381 else {
382 a_products[vectorIndex] = new Product;
383 }
384 } }
385 else if( a_mode == LUPI::DataBuffer::Mode::Memory ) {
386 a_buffer.m_placement += a_products.internalSize( );
387 a_buffer.incrementPlacement( sizeof( Product ) * vectorSize );
388 }
389
390 for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) {
391 a_products[vectorIndex]->serialize( a_buffer, a_mode );
392 }
393}
394
395/* *********************************************************************************************************//**
396 * This method serializes *a_delayedNeutrons* for broadcasting as needed for MPI and GPUs. The method can count the number of required
397 * bytes, pack *a_delayedNeutrons* or unpack *a_delayedNeutrons* depending on *a_mode*.
398 *
399 * @param a_delayedNeutrons [in] The delayed neutrons to serialize.
400 * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*.
401 * @param a_mode [in] Specifies the action of this method.
402 ***********************************************************************************************************/
403
405
406 std::size_t vectorSize = a_delayedNeutrons.size( );
407 int vectorSizeInt = (int) vectorSize;
408 DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode );
409 vectorSize = (std::size_t) vectorSizeInt;
410
411 if( a_mode == LUPI::DataBuffer::Mode::Unpack ) {
412 a_delayedNeutrons.resize( vectorSize, &a_buffer.m_placement );
413 for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) {
414 if( a_buffer.m_placement != nullptr ) {
415 a_delayedNeutrons[vectorIndex] = new(a_buffer.m_placement) DelayedNeutron;
416 a_buffer.incrementPlacement( sizeof( DelayedNeutron ) );
417 }
418 else {
419 a_delayedNeutrons[vectorIndex] = new DelayedNeutron;
420 }
421 } }
422 else if( a_mode == LUPI::DataBuffer::Mode::Memory ) {
423 a_buffer.m_placement += a_delayedNeutrons.internalSize( );
424 a_buffer.incrementPlacement( sizeof( DelayedNeutron ) * vectorSize );
425 }
426
427 for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) {
428 a_delayedNeutrons[vectorIndex]->serialize( a_buffer, a_mode );
429 }
430}
431
432/* *********************************************************************************************************//**
433 * This method serializes *a_Qs* for broadcasting as needed for MPI and GPUs. The method can count the number of required
434 * bytes, pack *a_Qs* or unpack *a_Qs* depending on *a_mode*.
435 *
436 * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*.
437 * @param a_mode [in] Specifies the action of this method.
438 * @param a_Qs [in] The Q functions to serialize.
439 ***********************************************************************************************************/
440
442
443 std::size_t vectorSize = a_Qs.size( );
444 int vectorSizeInt = (int) vectorSize;
445 DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode );
446 vectorSize = (std::size_t) vectorSizeInt;
447
448 if( a_mode == LUPI::DataBuffer::Mode::Unpack ) {
449 a_Qs.resize( vectorSize, &a_buffer.m_placement ); }
450 else if( a_mode == LUPI::DataBuffer::Mode::Memory ) {
451 a_buffer.m_placement += a_Qs.internalSize( );
452 }
453
454 for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) {
455 a_Qs[vectorIndex] = serializeFunction1d_d1( a_buffer, a_mode, a_Qs[vectorIndex] );
456 }
457}
458
459
460/* *********************************************************************************************************//**
461 *
462 * @param a_fissionResiduals [in] A reference to the GIDI::Construction::FissionResiduals reference serialize.
463 * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*.
464 * @param a_mode [in] Specifies the action of this method.
465 ***********************************************************************************************************/
466
468 LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) {
469
470 int fissionResidualsInt = 0;
471
472 if( a_mode != LUPI::DataBuffer::Mode::Unpack ) {
473 switch( a_fissionResiduals ) {
475 break;
477 fissionResidualsInt = 1;
478 break;
480 fissionResidualsInt = 2;
481 break;
482 }
483 }
484
485 DATA_MEMBER_INT( fissionResidualsInt, a_buffer, a_mode );
486
487 if( a_mode == LUPI::DataBuffer::Mode::Unpack ) {
488 switch( fissionResidualsInt ) {
489 case 0 :
491 break;
492 case 1 :
494 break;
495 case 2 :
497 break;
498 }
499 }
500}
501
502/* *********************************************************************************************************//**
503 * This function returns a std::vector<double> that represents **a_input**.
504 *
505 * @param a_input [in] The input for the returned std::vector<double> instance.
506 *
507 * @returns A std::vector<double> instance.
508 ***********************************************************************************************************/
509
510LUPI_HOST std::vector<double> vectorToSTD_vector( Vector<double> a_input ) {
511
512 std::vector<double> vector( a_input.size( ) );
513
514 std::size_t index = 0;
515 for( auto iter = a_input.begin( ); iter != a_input.end( ); ++iter, ++index ) vector[index] = *iter;
516
517 return( vector );
518}
519
520/* *********************************************************************************************************//**
521 * This function returns a std::vector<double> that represents **a_input**.
522 *
523 * @param a_input [in] The input for the returned std::vector<double> instance.
524 *
525 * @returns A std::vector<double> instance.
526 ***********************************************************************************************************/
527
528LUPI_HOST std::vector<double> vectorToSTD_vector( Vector<float> a_input ) {
529
530 std::vector<double> vector( a_input.size( ) );
531
532 std::size_t index = 0;
533 for( auto iter = a_input.begin( ); iter != a_input.end( ); ++iter, ++index ) vector[index] = *iter;
534
535 return( vector );
536}
537
538}
#define DATA_MEMBER_INT( member, buf, mode)
#define LUPI_HOST_DEVICE
#define LUPI_THROW(arg)
#define LUPI_HOST
#define MCGIDI_particleBeta(a_mass_unitOfEnergy, a_kineticEnergy)
Definition MCGIDI.hpp:71
std::size_t size() const
Definition GIDI_data.hpp:79
LUPI_HOST_DEVICE void incrementPlacement(std::size_t a_delta)
GIDI::ProtareSingle const & m_GIDI_protare
Definition MCGIDI.hpp:255
std::map< std::string, ACE_URR_probabilityTablesFromGIDI * > m_ACE_URR_probabilityTablesFromGIDI
Definition MCGIDI.hpp:279
GIDI::GRIN::GRIN_continuumGammas const * m_GRIN_continuumGammas
Definition MCGIDI.hpp:280
LUPI_HOST SetupInfo(ProtareSingle &a_protare, GIDI::ProtareSingle const &a_GIDI_protare, PoPI::Database const &a_popsUser, PoPI::Database const &a_pops)
PoPI::Database const & m_popsUser
Definition MCGIDI.hpp:256
ProtareSingle & m_protare
Definition MCGIDI.hpp:254
PoPI::Database const & m_pops
Definition MCGIDI.hpp:257
LUPI_HOST ~SetupInfo()
LUPI_HOST_DEVICE std::size_t internalSize() const
LUPI_HOST_DEVICE std::size_t size() const
LUPI_HOST_DEVICE iterator begin()
LUPI_HOST_DEVICE void resize(std::size_t s, char **address=nullptr, bool mem_flag=CPU_MEM)
LUPI_HOST_DEVICE iterator end()
bool exists(std::string const &a_id) const
int intid(std::string const &a_id) const
bool isSupported()
Definition PoPI.hpp:283
bool isNuclear()
Definition PoPI.hpp:285
Simple C++ string class, useful as replacement for std::string if this cannot be used,...
Definition MCGIDI.hpp:43
LUPI_HOST int MCGIDI_popsIntid(PoPI::Database const &a_pops, std::string const &a_ID)
LUPI_HOST void addVectorItemsToSet(Vector< int > const &a_from, std::set< int > &a_to)
LUPI_HOST_DEVICE double boostSpeed(double a_massProjectile, double a_kineticEnergyProjectile, double a_massTarget)
LUPI_HOST_DEVICE void serializeFissionResiduals(GIDI::Construction::FissionResiduals &a_fissionResiduals, LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode)
LUPI_HOST_DEVICE void serializeDelayedNeutrons(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector< DelayedNeutron * > &a_delayedNeutrons)
LUPI_HOST Vector< double > GIDI_VectorDoublesToMCGIDI_VectorDoubles(GIDI::Vector a_vector)
LUPI_HOST_DEVICE void serializeQs(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector< Functions::Function1d_d1 * > &a_Qs)
LUPI_HOST_DEVICE double particleKineticEnergy(double a_mass_unitOfEnergy, double a_particleBeta)
LUPI_HOST int MCGIDI_popsIndex(PoPI::Database const &a_pops, std::string const &a_ID)
LUPI_HOST_DEVICE void serializeProducts(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector< Product * > &a_products)
LUPI_HOST_DEVICE double particleKineticEnergyFromBeta2(double a_mass_unitOfEnergy, double a_particleBeta2)
LUPI_HOST std::vector< double > vectorToSTD_vector(Vector< double > a_input)
LUPI_HOST_DEVICE int distributionTypeToInt(Distributions::Type a_type)
LUPI_HOST_DEVICE int muCOM_From_muLab(double a_muLab, double a_boostBeta, double a_productBeta, double &a_muPlus, double &a_JacobianPlus, double &a_muMinus, double &a_JacobianMinus)
LUPI_HOST_DEVICE Functions::Function1d_d1 * serializeFunction1d_d1(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Functions::Function1d_d1 *a_function1d)
LUPI_HOST_DEVICE Distributions::Type intToDistributionType(int a_type)
Definition PoPI.hpp:28
static std::string const photon
Definition PoPI.hpp:162
static std::string const neutron
Definition PoPI.hpp:164
static std::string const FissionProductENDL99125
Definition PoPI.hpp:172
static std::string const FissionProductENDL99120
Definition PoPI.hpp:171
static int constexpr FissionProductENDL99120
Definition PoPI.hpp:180
static int constexpr photon
Definition PoPI.hpp:178
static int constexpr neutron
Definition PoPI.hpp:177
static int constexpr FissionProductENDL99125
Definition PoPI.hpp:181