Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
MCGIDI_outputChannel.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 Product
15 * This class represents a **GNDS** <**outputChannel**> node with only data needed for Monte Carlo transport.
16 */
17
18
19/* *********************************************************************************************************//**
20 * Default constructor used when broadcasting a Protare as needed by MPI or GPUs.
21 ***********************************************************************************************************/
22
24 m_channelType( ChannelType::none ),
25 m_neutronIndex( -1 ),
26 m_isFission( false ),
27 m_hasFinalStatePhotons( false ),
28 m_Q( nullptr ),
29 m_products( ),
30 m_totalDelayedNeutronMultiplicity( nullptr ) {
31
32}
33
34/* *********************************************************************************************************//**
35 * @param a_outputChannel [in] The GIDI::OutputChannel whose data is to be used to construct *this*.
36 * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors.
37 * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired.
38 * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes).
39 ***********************************************************************************************************/
40
41LUPI_HOST OutputChannel::OutputChannel( GIDI::OutputChannel const *a_outputChannel, SetupInfo &a_setupInfo, Transporting::MC const &a_settings,
42 GIDI::Transporting::Particles const &a_particles ) :
43 m_channelType( ChannelType::none ),
44 m_neutronIndex( a_setupInfo.m_neutronIndex ),
45 m_isFission( false ),
46 m_hasFinalStatePhotons( false ),
47 m_Q( nullptr ),
48 m_products( ),
49 m_totalDelayedNeutronMultiplicity( nullptr ) {
50
51 if( a_outputChannel != nullptr ) {
52 m_channelType = a_outputChannel->twoBody( ) ? ChannelType::twoBody : ChannelType::uncorrelatedBodies;
53 m_isFission = a_outputChannel->isFission( );
54
55 m_Q = Functions::parseFunction1d_d1( a_outputChannel->Q( ).get<GIDI::Functions::Function1dForm>( 0 ) );
56 if( a_setupInfo.m_isPairProduction ) {
57 double domainMin = m_Q->domainMin( ), domainMax = m_Q->domainMax( );
58
59 delete m_Q;
60 m_Q = new Functions::Constant1d( domainMin, domainMax, 0.0 );
61 }
62 a_setupInfo.m_Q = m_Q->evaluate( 0 ); // Needed for NBodyPhaseSpace.
63
64 GIDI::Suite const &products = a_outputChannel->products( );
65 if( m_channelType == ChannelType::twoBody ) {
66 if( !a_setupInfo.m_protare.isTNSL_ProtareSingle( ) ) {
67 GIDI::Product const *product = products.get<GIDI::Product>( 1 );
68 a_setupInfo.m_product2Mass = product->particle( ).mass( "MeV/c**2" ); // Includes nuclear excitation energy.
69 }
70 }
71
72 bool electronPresent = false;
73 std::size_t size = 0;
74 std::set<std::size_t> productsToDo;
75 for( std::size_t i1 = 0; i1 < a_outputChannel->products( ).size( ); ++i1 ) {
76 GIDI::Product const *product = products.get<GIDI::Product>( i1 );
77
78 if( product->particle( ).ID( ) == PoPI::IDs::electron ) electronPresent = true;
79 if( electronPresent && !a_setupInfo.m_isPhotoAtomicIncoherentScattering ) continue;
80 if( !electronPresent && !product->isCompleteParticle( ) && ( product->outputChannel( ) == nullptr ) ) continue;
81
82 if( ( product->outputChannel( ) != nullptr ) || a_settings.sampleNonTransportingParticles( ) || a_particles.hasParticle( product->particle( ).ID( ) ) )
83 productsToDo.insert( i1 );
84 }
85 size = productsToDo.size( );
86 if( a_setupInfo.m_isPairProduction ) {
87 size += 2;
88 size = 2; // This is a kludge until the ENDL to GNDS translator is fixed.
89 }
90
91 bool addIncoherentPhotoAtomicScatteringElectron = false;
92 if( a_setupInfo.m_isPhotoAtomicIncoherentScattering && a_particles.hasParticle( PoPI::IDs::electron ) ) { // May need to add electron for legacy GNDS files.
93 if( !electronPresent ) {
94// FIXME: BRB 7/Nov/2024, Why is an electron added, this is incoherent atomic scattering which does not emit an electron?
95 addIncoherentPhotoAtomicScatteringElectron = true;
96 ++size;
97 }
98 }
99 m_products.reserve( size );
100
101 if( a_setupInfo.m_isPairProduction ) {
102 std::string ID( PoPI::IDs::photon );
103 std::string label = ID;
104
105 Product *product = new Product( a_setupInfo.m_popsUser, ID, label );
106 product->setMultiplicity( new Functions::Constant1d( a_setupInfo.m_domainMin, a_setupInfo.m_domainMax, 1.0, 0.0 ) );
107 product->distribution( new Distributions::PairProductionGamma( a_setupInfo, true ) );
108 m_products.push_back( product );
109
110 label += "__a";
111 product = new Product( a_setupInfo.m_popsUser, ID, label );
112 product->setMultiplicity( new Functions::Constant1d( a_setupInfo.m_domainMin, a_setupInfo.m_domainMax, 1.0, 0.0 ) );
113 product->distribution( new Distributions::PairProductionGamma( a_setupInfo, false ) );
114 m_products.push_back( product );
115 }
116
117 for( std::size_t i1 = 0; i1 < a_outputChannel->products( ).size( ); ++i1 ) {
118 if( productsToDo.find( i1 ) == productsToDo.end( ) ) continue;
119
120 GIDI::Product const *product = products.get<GIDI::Product>( i1 );
121
122 if( a_setupInfo.m_isPairProduction ) {
123 if( !a_settings.sampleNonTransportingParticles( ) ) continue;
124 if( a_setupInfo.m_protare.targetIntid( ) != MCGIDI_popsIntid( a_setupInfo.m_pops, product->particle( ).ID( ) ) ) continue;
125 }
127 if( m_channelType == ChannelType::twoBody ) a_setupInfo.m_twoBodyOrder = ( ( i1 == 0 ? TwoBodyOrder::firstParticle : TwoBodyOrder::secondParticle ) );
128 m_products.push_back( new Product( product, a_setupInfo, a_settings, a_particles, m_isFission ) );
129
130 if( addIncoherentPhotoAtomicScatteringElectron && ( product->particle( ).ID( ) == PoPI::IDs::photon ) ) {
131 addIncoherentPhotoAtomicScatteringElectron = false;
132
133 Product *product2 = new Product( a_setupInfo.m_pops, PoPI::IDs::electron, PoPI::IDs::electron );
134 product2->setMultiplicity( new Functions::Constant1d( a_setupInfo.m_domainMin, a_setupInfo.m_domainMax, 1.0, 0.0 ) );
136 m_products.push_back( product2 );
137 }
138 }
139
141 GIDI::FissionFragmentData const &fissionFragmentData = a_outputChannel->fissionFragmentData( );
142 GIDI::Suite const &delayedNeutrons = fissionFragmentData.delayedNeutrons( );
143
144 if( delayedNeutrons.size( ) > 0 ) {
145 bool missingData = false;
146 GIDI::Axes axes;
147 GIDI::Functions::XYs1d totalDelayedNeutronMultiplicity( axes, ptwXY_interpolationLinLin );
148
149 m_delayedNeutrons.reserve( delayedNeutrons.size( ) );
150 for( std::size_t i1 = 0; i1 < delayedNeutrons.size( ); ++i1 ) {
152 GIDI::Product const &product = delayedNeutron->product( );
153 GIDI::Suite const &multiplicity = product.multiplicity( );
154
156
157 if( form1d->type( ) == GIDI::FormType::unspecified1d ) {
158 missingData = true;
159 break;
160 }
161
162 if( form1d->type( ) != GIDI::FormType::XYs1d ) {
163 std::cerr << "OutputChannel::OutputChannel: GIDI::DelayedNeutron multiplicity type != GIDI::FormType::XYs1d" << std::endl;
164 missingData = true;
165 break;
166 }
167
168 GIDI::Functions::XYs1d const *multiplicityXYs1d = static_cast<GIDI::Functions::XYs1d const *>( form1d );
169 totalDelayedNeutronMultiplicity += *multiplicityXYs1d;
170
171 m_delayedNeutrons.push_back( new DelayedNeutron( static_cast<int>( i1 ), delayedNeutron, a_setupInfo, a_settings, a_particles ) );
172 }
173 if( !missingData ) m_totalDelayedNeutronMultiplicity = new Functions::XYs1d( totalDelayedNeutronMultiplicity );
174 }
175 }
176
177 m_hasFinalStatePhotons = a_setupInfo.m_hasFinalStatePhotons;
178 }
179}
180
181/* *********************************************************************************************************//**
182 ***********************************************************************************************************/
183
185
186 delete m_Q;
187 for( std::size_t i1 = 0; i1 < m_products.size( ); ++i1 ) delete m_products[i1];
188
189 delete m_totalDelayedNeutronMultiplicity;
190 for( std::size_t i1 = 0; i1 < m_delayedNeutrons.size( ); ++i1 ) delete m_delayedNeutrons[i1];
191}
192
193/* *********************************************************************************************************//**
194 * This method returns the final Q for *this* by getting its final Q plus any sub-output channel's finalQ.
195 *
196 * @param a_x1 [in] The energy of the projectile.
197 *
198 * @return The Q-value at product energy *a_x1*.
199 ***********************************************************************************************************/
200
201LUPI_HOST_DEVICE double OutputChannel::finalQ( double a_x1 ) const {
202
203 double final_Q = m_Q->evaluate( a_x1 );
204
205 for( std::size_t i1 = 0; i1 < m_products.size( ); ++i1 ) final_Q += m_products[i1]->finalQ( a_x1 );
206 return( final_Q );
207}
208
209/* *********************************************************************************************************//**
210 * This method returns *true* if the output channel or any of its sub-output channels is a fission channel and *false* otherwise.
211 *
212 * @return *true* if *this* or any sub-output channel is a fission channel and *false* otherwise.
213 ***********************************************************************************************************/
214
216
217 if( m_isFission ) return( true );
218 for( std::size_t i1 = 0; i1 < m_products.size( ); ++i1 ) {
219 if( m_products[i1]->hasFission( ) ) return( true );
220 }
221 return( false );
222}
223
224/* *********************************************************************************************************//**
225 * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*.
226 *
227 * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set.
228 * @param a_userParticleIndex [in] The particle index specified by the user.
229 ***********************************************************************************************************/
230
231LUPI_HOST void OutputChannel::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) {
232
233 for( auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex );
234 for( auto iter = m_delayedNeutrons.begin( ); iter != m_delayedNeutrons.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex );
235}
236
237/* *********************************************************************************************************//**
238 * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*.
239 *
240 * @param a_particleIntid [in] The PoPs intid of the particle whose user index is to be set.
241 * @param a_userParticleIndex [in] The particle index specified by the user.
242 ***********************************************************************************************************/
243
244LUPI_HOST void OutputChannel::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) {
245
246 for( auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex );
247 for( auto iter = m_delayedNeutrons.begin( ); iter != m_delayedNeutrons.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex );
248}
249
250/* *********************************************************************************************************//**
251 * This method calls the **setModelDBRC_data* method on the first product of *this* with *a_modelDBRC_data*.
252 *
253 * @param a_modelDBRC_data [in] The instance storing data needed to treat the DRRC upscatter mode.
254 ***********************************************************************************************************/
255
257
258 m_products[0]->setModelDBRC_data( a_modelDBRC_data );
259}
260
261/* *********************************************************************************************************//**
262 * Returns the energy dependent multiplicity for outgoing particle with pops id *a_id*. The returned value may not
263 * be an integer. Energy dependent multiplicity mainly occurs for photons and fission neutrons.
264 *
265 * @param a_products [in] The std::vector instance to add products to.
266 * @param a_totalDelayedNeutronMultiplicity [in] The std::vector instance to add delayed neutron multiplicities to.
267 * @param a_delayedNeutrons [in] The std::vector instance to add delayed neutrons to.
268 * @param a_Qs [in] The std::vector instance to add Q functions to.
269 ***********************************************************************************************************/
270
271LUPI_HOST void OutputChannel::moveProductsEtAlToReaction( std::vector<Product *> &a_products, Functions::Function1d **a_totalDelayedNeutronMultiplicity,
272 std::vector<DelayedNeutron *> &a_delayedNeutrons, std::vector<Functions::Function1d_d1 *> &a_Qs ) {
273
274 if( a_totalDelayedNeutronMultiplicity != nullptr ) { /* This will not work if fission is a nested channel. Ergo "n + (R -> fission)". */
275 *a_totalDelayedNeutronMultiplicity = m_totalDelayedNeutronMultiplicity;
276 m_totalDelayedNeutronMultiplicity = nullptr;
277 for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) {
278 a_delayedNeutrons.push_back( m_delayedNeutrons[index] );
279 m_delayedNeutrons[index] = nullptr;
280 }
281 }
282
283 a_Qs.push_back( m_Q );
284 m_Q = nullptr;
285 for( std::size_t productIndex = 0; productIndex < m_products.size( ); ++productIndex ) {
286 Product *product = m_products[productIndex];
287
288 if( product->outputChannel( ) != nullptr ) {
289 product->outputChannel( )->moveProductsEtAlToReaction( a_products, nullptr, a_delayedNeutrons, a_Qs );
290 delete product; }
291 else {
292 a_products.push_back( product );
293 }
294 m_products[productIndex] = nullptr;
295 }
296}
297
298#ifdef MCGIDI_USE_OUTPUT_CHANNEL
299/* *********************************************************************************************************//**
300 * Adds the associated orphan products of an orphan product to *a_products*.
301 *
302 * @param a_products [in] The std::vector instance to add products to.
303 *
304 * @return This does not seem to be working. Needs work.
305 ***********************************************************************************************************/
306
307LUPI_HOST void OutputChannel::addOrphanProductToProductList( std::vector<Product *> &a_products ) const {
308
309 for( int productIndex = 0; productIndex < m_products.size( ); ++productIndex ) {
310 Product *product = m_products[productIndex];
311
312 if( product->outputChannel( ) != nullptr ) {
313 product->outputChannel( )->addOrphanProductToProductList( a_products ); }
314 else {
315 a_products.push_back( product );
316 }
317 }
318
319}
320
321/* *********************************************************************************************************//**
322 * Adds the associated orphan products of an orphan product to *a_products*.
323 *
324 * @param a_products [in] The std::vector instance to add products to.
325 *
326 * @return This does not seem to be working. Needs work.
327 ***********************************************************************************************************/
328
329LUPI_HOST_DEVICE void OutputChannel::addOrphanProductToProductList( Vector<Product *> &a_products ) const {
330
331 for( int productIndex = 0; productIndex < m_products.size( ); ++productIndex ) {
332 Product *product = m_products[productIndex];
333
334 if( product->outputChannel( ) != nullptr ) {
335 product->outputChannel( )->addOrphanProductToProductList( a_products ); }
336 else {
337 a_products.push_back( product );
338 }
339 }
340
341}
342
343/* *********************************************************************************************************//**
344 * Adds the associated orphan products of an orphan product to *a_products*.
345 *
346 * @param a_products [in] The std::vector instance to add products to.
347 *
348 * @return This does not seem to be working. Needs work.
349 ***********************************************************************************************************/
350
351LUPI_HOST_DEVICE void OutputChannel::addOrphanProductToProductList( Vector<Product *> &a_products ) const {
352
353 for( int productIndex = 0; productIndex < m_products.size( ); ++productIndex ) {
354 Product *product = m_products[productIndex];
355
356 if( product->outputChannel( ) != nullptr ) {
357 product->outputChannel( )->addOrphanProductToProductList( a_products ); }
358 else {
359 a_products.push_back( product );
360 }
361 }
362
363}
364#endif
365
366/* *********************************************************************************************************//**
367 * Returns the energy dependent multiplicity for outgoing particle with pops index *a_index*. The returned value may not
368 * be an integer. Energy dependent multiplicity mainly occurs for photons and fission neutrons.
369 *
370 * @param a_index [in] The index of the requested particle.
371 * @param a_projectileEnergy [in] The energy of the projectile.
372 *
373 * @return The multiplicity value for the requested particle.
374 ***********************************************************************************************************/
375
376LUPI_HOST_DEVICE double OutputChannel::productAverageMultiplicity( int a_index, double a_projectileEnergy ) const {
377
378 double multiplicity = 0.0;
379
380 for( Vector<Product *>::const_iterator iter = m_products.begin( ); iter != m_products.end( ); ++iter ) {
381 multiplicity += (*iter)->productAverageMultiplicity( a_index, a_projectileEnergy );
382 }
383
384 if( m_totalDelayedNeutronMultiplicity != nullptr ) {
385 if( a_index == m_neutronIndex ) multiplicity += m_totalDelayedNeutronMultiplicity->evaluate( a_projectileEnergy );
386 }
387
388 return( multiplicity );
389}
390
391/* *********************************************************************************************************//**
392 * Returns the energy dependent multiplicity for outgoing particle with pops intid *a_intid*. The returned value may not
393 * be an integer. Energy dependent multiplicity mainly occurs for photons and fission neutrons.
394 *
395 * @param a_intid [in] The intid of the requested particle.
396 * @param a_projectileEnergy [in] The energy of the projectile.
397 *
398 * @return The multiplicity value for the requested particle.
399 ***********************************************************************************************************/
400
401LUPI_HOST_DEVICE double OutputChannel::productAverageMultiplicityViaIntid( int a_intid, double a_projectileEnergy ) const {
402
403 double multiplicity = 0.0;
404
405 for( Vector<Product *>::const_iterator iter = m_products.begin( ); iter != m_products.end( ); ++iter ) {
406 multiplicity += (*iter)->productAverageMultiplicityViaIntid( a_intid, a_projectileEnergy );
407 }
408
409 if( m_totalDelayedNeutronMultiplicity != nullptr ) {
410 if( a_intid == PoPI::Intids::neutron ) multiplicity += m_totalDelayedNeutronMultiplicity->evaluate( a_projectileEnergy );
411 }
412
413 return( multiplicity );
414}
415
416/* *********************************************************************************************************//**
417 * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required
418 * bytes, pack *this* or unpack *this* depending on *a_mode*.
419 *
420 * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*.
421 * @param a_mode [in] Specifies the action of this method.
422 ***********************************************************************************************************/
423
425
426 int channelType = 0;
427 switch( m_channelType ) {
428 case ChannelType::none :
429 break;
431 channelType = 1;
432 break;
434 channelType = 2;
435 break;
436 }
437 DATA_MEMBER_INT( channelType, a_buffer, a_mode );
438 if( a_mode == LUPI::DataBuffer::Mode::Unpack ) {
439 switch( channelType ) {
440 case 0 :
441 m_channelType = ChannelType::none;
442 break;
443 case 1 :
444 m_channelType = ChannelType::twoBody;
445 break;
446 case 2 :
447 m_channelType = ChannelType::uncorrelatedBodies;
448 break;
449 }
450 }
451
452 DATA_MEMBER_INT( m_neutronIndex, a_buffer, a_mode );
453 DATA_MEMBER_CAST( m_isFission, a_buffer, a_mode, bool );
454 DATA_MEMBER_CAST( m_hasFinalStatePhotons, a_buffer, a_mode, bool );
455
456 m_Q = serializeFunction1d_d1( a_buffer, a_mode, m_Q );
457 serializeProducts( a_buffer, a_mode, m_products );
458 m_totalDelayedNeutronMultiplicity = serializeFunction1d( a_buffer, a_mode, m_totalDelayedNeutronMultiplicity );
459 serializeDelayedNeutrons( a_buffer, a_mode, m_delayedNeutrons );
460}
461
462}
G4ConcreteNNToDeltaDelta channelType
#define DATA_MEMBER_CAST(member, buf, mode, someType)
#define DATA_MEMBER_INT( member, buf, mode)
#define LUPI_HOST_DEVICE
#define LUPI_HOST
FormType type() const
Definition GIDI.hpp:667
FissionFragmentData & fissionFragmentData()
Definition GIDI.hpp:4119
Suite & products()
Definition GIDI.hpp:4117
bool isFission() const
Definition GIDI.hpp:4130
bool twoBody() const
Definition GIDI.hpp:4111
Component & Q()
Definition GIDI.hpp:4115
T * get(std::size_t a_Index)
Definition GIDI.hpp:2642
std::size_t size() const
Definition GIDI.hpp:2591
bool hasParticle(std::string const &a_id) const
DelayedNeutrons delayedNeutrons() const
Definition GIDI.hpp:3727
LUPI_HOST_DEVICE void serialize(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode)
LUPI_HOST_DEVICE double finalQ(double a_x1) const
LUPI_HOST_DEVICE bool hasFission() const
LUPI_HOST_DEVICE Vector< Product * > const & products() const
Definition MCGIDI.hpp:1303
Vector< DelayedNeutron * > delayedNeutrons() const
Definition MCGIDI.hpp:1305
LUPI_HOST_DEVICE OutputChannel()
LUPI_HOST void setUserParticleIndexViaIntid(int a_particleIntid, int a_userParticleIndex)
LUPI_HOST_DEVICE double productAverageMultiplicity(int a_index, double a_projectileEnergy) const
LUPI_HOST void setUserParticleIndex(int a_particleIndex, int a_userParticleIndex)
LUPI_HOST void moveProductsEtAlToReaction(std::vector< Product * > &a_products, Functions::Function1d **a_totalDelayedNeutronMultiplicity, std::vector< DelayedNeutron * > &a_delayedNeutrons, std::vector< Functions::Function1d_d1 * > &a_Qs)
LUPI_HOST_DEVICE double productAverageMultiplicityViaIntid(int a_intid, double a_projectileEnergy) const
LUPI_HOST_DEVICE DelayedNeutron const * delayedNeutron(std::size_t a_index) const
Definition MCGIDI.hpp:1306
LUPI_HOST void setModelDBRC_data(Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data)
LUPI_HOST_DEVICE ~OutputChannel()
LUPI_HOST_DEVICE Distributions::Distribution const * distribution() const
Definition MCGIDI.hpp:1220
LUPI_HOST void setMultiplicity(Functions::Function1d *a_multiplicity)
Definition MCGIDI.hpp:1216
LUPI_HOST_DEVICE bool isTNSL_ProtareSingle() const
Definition MCGIDI.hpp:1541
LUPI_HOST_DEVICE int targetIntid() const
Definition MCGIDI.hpp:1524
double m_product2Mass
Definition MCGIDI.hpp:263
bool m_isPhotoAtomicIncoherentScattering
Definition MCGIDI.hpp:268
TwoBodyOrder m_twoBodyOrder
Definition MCGIDI.hpp:266
bool m_hasFinalStatePhotons
Definition MCGIDI.hpp:275
bool m_isPairProduction
Definition MCGIDI.hpp:267
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 bool sampleNonTransportingParticles() const
Definition MCGIDI.hpp:145
LUPI_HOST Function1d_d1 * parseFunction1d_d1(Transporting::MC const &a_settings, GIDI::Suite const &a_suite)
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_DEVICE void serializeDelayedNeutrons(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector< DelayedNeutron * > &a_delayedNeutrons)
ChannelType
Definition MCGIDI.hpp:381
LUPI_HOST_DEVICE Functions::Function1d * serializeFunction1d(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Functions::Function1d *a_function1d)
LUPI_HOST_DEVICE void serializeProducts(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector< Product * > &a_products)
LUPI_HOST_DEVICE Functions::Function1d_d1 * serializeFunction1d_d1(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Functions::Function1d_d1 *a_function1d)
@ ptwXY_interpolationLinLin
Definition ptwXY.h:37
static std::string const photon
Definition PoPI.hpp:162
static std::string const neutron
Definition PoPI.hpp:164
static std::string const electron
Definition PoPI.hpp:163
static int constexpr neutron
Definition PoPI.hpp:177