21 m_twoBody( a_twoBody ),
22 m_fissions( a_fissions ),
23 m_process( a_process ),
26 m_fissionFragmentData( ),
27 m_fissionResiduals(
Construction::FissionResiduals::none ) {
29 m_Q.setAncestor(
this );
30 m_products.setAncestor(
this );
31 m_fissionFragmentData.setAncestor(
this );
49 GUPI::Ancestry( a_node.name( ) ),
51 m_fissions( a_isFission ),
56 m_fissionResiduals(
Construction::FissionResiduals::none ) {
81 std::size_t size = m_products.size( );
83 for( std::size_t index = 0; index < size; ++index ) {
87 if( productDepth > _depth ) _depth = productDepth;
106 for(
auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) {
109 if( !
product->areAllProductsTracked( a_particles ) )
return(
false );
125 for(
auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) {
172 if( m_fissions )
return(
true );
174 std::size_t size = m_products.size( );
175 for( std::size_t index = 0; index < size; ++index ) {
178 if(
product.hasFission( ) )
return(
true );
191 if( !m_fissionFragmentData.isDelayedFissionNeutronComplete( ) )
return(
false );
193 std::size_t size = m_products.size( );
194 for( std::size_t index = 0; index < size; ++index ) {
197 if( !
product.isDelayedFissionNeutronComplete(
false ) )
return(
false );
214 std::size_t size = m_products.size( );
216 for( std::size_t index = 0; index < size; ++index ) {
222 m_fissionFragmentData.productIDs( a_indices, a_particles, a_transportablesOnly );
224 if( !a_transportablesOnly &&
isFission( ) ) {
243 int total_multiplicity = 0;
244 std::size_t size = m_products.size( );
254 for( std::size_t index = 0; index < size; ++index ) {
258 if( multiplicity < 0 )
return( -1 );
259 total_multiplicity += multiplicity;
262 int multiplicity = m_fissionFragmentData.productMultiplicity( a_productID );
263 if( multiplicity < 0 )
return( -1 );
265 return( total_multiplicity + multiplicity );
282 std::size_t size = m_products.size( );
283 int _maximumLegendreOrder = -1;
285 for( std::size_t index = 0; index < size; ++index ) {
289 if( r_maximumLegendreOrder > _maximumLegendreOrder ) _maximumLegendreOrder = r_maximumLegendreOrder;
292 int r_maximumLegendreOrder = m_fissionFragmentData.maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID );
293 if( r_maximumLegendreOrder > _maximumLegendreOrder ) _maximumLegendreOrder = r_maximumLegendreOrder;
295 return( _maximumLegendreOrder );
315 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
318 vector +=
product.multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID );
321 vector += m_fissionFragmentData.multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID );
346 if( form !=
nullptr ) vector += form->
data( );
349 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
352 vector += product1.
multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final );
356 vector += m_fissionFragmentData.multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final );
377 std::size_t a_order )
const {
381 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
384 matrix +=
product.multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order );
387 matrix += m_fissionFragmentData.multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order );
408 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
411 vector +=
product.multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID );
414 vector += m_fissionFragmentData.multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID );
435 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
438 vector +=
product.multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID );
441 vector += m_fissionFragmentData.multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID );
456 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
462 m_fissionFragmentData.incompleteParticles( a_settings, a_incompleteParticles );
478 double &a_productEnergy,
double &a_productMomentum,
double &a_productGain,
bool a_ignoreIncompleteParticles )
const {
480 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
486 m_fissionFragmentData.continuousEnergyProductData( a_settings, a_particleID, a_energy, a_productEnergy, a_productMomentum, a_productGain,
487 a_ignoreIncompleteParticles );
504 std::vector<double>
const &a_energies, std::size_t a_offset, std::vector<double> &a_productEnergies, std::vector<double> &a_productMomenta,
505 std::vector<double> &a_productGains,
bool a_ignoreIncompleteParticles )
const {
507 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
511 a_productGains, a_ignoreIncompleteParticles );
514 m_fissionFragmentData.mapContinuousEnergyProductData( a_settings, a_particleID, a_energies, a_offset, a_productEnergies, a_productMomenta,
515 a_productGains, a_ignoreIncompleteParticles );
533 for( std::size_t index = 0; index < m_products.size( ); ++index ) {
539 m_fissionFragmentData.calculateMultiGroupData( a_protare, a_temperatureInfo, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, a_crossSectionXYs1d );
552 std::string attributes;
564 m_Q.toXMLList( a_writeInfo, indent2 );
565 m_products.toXMLList( a_writeInfo, indent2 );
566 m_fissionFragmentData.toXMLList( a_writeInfo, indent2 );
#define GIDI_twoBodyChars
#define GIDI_fissionFragmentDataChars
#define GIDI_outputChannelChars
#define GIDI_processChars
#define GIDI_productsChars
FissionResiduals fissionResiduals() const
Vector const & data() const
OutputChannel(bool a_twoBody, bool a_fissions, std::string const &a_process)
Vector multiGroupAverageMomentum(LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID) const
void toXMLList(GUPI::WriteInfo &a_writeInfo, std::string const &a_indent="") const
void productIDs(std::set< std::string > &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly) const
void modifiedMultiGroupElasticForTNSL(std::map< std::string, std::size_t > const &a_maximumTNSL_MultiGroupIndex)
void mapContinuousEnergyProductData(Transporting::Settings const &a_settings, std::string const &a_particleID, std::vector< double > const &a_energies, std::size_t a_offset, std::vector< double > &a_productEnergies, std::vector< double > &a_productMomenta, std::vector< double > &a_productGains, bool a_ignoreIncompleteParticles) const
void calculateMultiGroupData(ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Functions::XYs1d const &a_crossSectionXYs1d)
void continuousEnergyProductData(Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles) const
int productMultiplicity(std::string const &a_productID) const
bool isDelayedFissionNeutronComplete() const
void incompleteParticles(Transporting::Settings const &a_settings, std::set< std::string > &a_incompleteParticles) const
int maximumLegendreOrder(LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID) const
GUPI::Ancestry * findInAncestry3(std::string const &a_item)
Vector multiGroupAverageEnergy(LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID) const
Vector multiGroupQ(LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, bool a_final) const
Vector multiGroupMultiplicity(LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID) const
Matrix multiGroupProductMatrix(LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, std::string const &a_productID, std::size_t a_order) const
bool areAllProductsTracked(Transporting::Particles const &a_particles) const
Vector multiGroupQ(LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, bool a_final) const
void mapContinuousEnergyProductData(Transporting::Settings const &a_settings, std::string const &a_particleID, std::vector< double > const &a_energies, std::size_t a_offset, std::vector< double > &a_productEnergies, std::vector< double > &a_productMomenta, std::vector< double > &a_productGains, bool a_ignoreIncompleteParticles) const
int productMultiplicity(std::string const &a_productID) const
int maximumLegendreOrder(LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID) const
void productIDs(std::set< std::string > &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly) const
void calculateMultiGroupData(ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Functions::XYs1d const &a_crossSectionXYs1d)
void modifiedMultiGroupElasticForTNSL(std::map< std::string, std::size_t > const &a_maximumTNSL_MultiGroupIndex)
void incompleteParticles(Transporting::Settings const &a_settings, std::set< std::string > &a_incompleteParticles) const
void continuousEnergyProductData(Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles) const
Form const * form(LUPI::StatusMessageReporting &a_smr, GIDI::Suite const &a_suite, Styles::TemperatureInfo const &a_temperatureInfo, std::string a_dataType, std::string const &a_label="") const
void setAncestor(Ancestry *a_ancestor)
std::string const & moniker() const
Ancestry(std::string const &a_moniker, std::string const &a_attribute="")
void addNodeEnder(std::string const &a_moniker)
std::string incrementalIndent(std::string const &indent)
void addNodeStarter(std::string const &indent, std::string const &a_moniker, std::string const &a_attributes="")
std::string addAttribute(std::string const &a_name, std::string const &a_value) const
void calculate1dMultiGroupDataInComponent(ProtareSingle const *a_protare, std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Component &a_component, Functions::XYs1d const &a_crossSection)
Form * parseProductSuite(Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles)
Form * parseQSuite(Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles)
static std::string const FissionProductENDL99125
static std::string const FissionProductENDL99120