@@ -48,7 +48,6 @@ struct SourceSite {
4848 double time {0.0 };
4949 double wgt {1.0 };
5050 int delayed_group {0 };
51- int surf_id {0 };
5251 int fission_nuclide;
5352 int surf_id {SURFACE_NONE};
5453 ParticleType particle;
@@ -434,11 +433,13 @@ class ParticleData : public GeometryState {
434433 double E_;
435434 double E_last_;
436435 double E_parent_; // !< energy of parent neutron in eV
436+ double E_pprod_;
437437 int g_ {0 };
438438 int g_last_;
439439
440440 // Other birth data
441441 int fission_nuclide_; // !< this particle was born as a result of this nuclide fissioning
442+ int pprod_nuclide_;
442443 // a double for fission cross section at birth? if so, I need to also add it to the bank...
443444
444445 double wgt_ {1.0 };
@@ -480,6 +481,9 @@ class ParticleData : public GeometryState {
480481 vector<double > flux_derivs_;
481482
482483 std::vector<std::vector<double >> cumulative_sensitivities_; // for sensitivities for this particle
484+ std::vector<std::vector<double >> cum_sens_;
485+ std::vector<std::vector<double >> pprod_sens_;
486+ double neutron_flux_last_ = 0.0 ;
483487
484488 vector<FilterMatch> filter_matches_;
485489
@@ -544,6 +548,8 @@ class ParticleData : public GeometryState {
544548 const double & E_last () const { return E_last_; }
545549 double & E_parent () { return E_parent_; } // for sensitivity analysis
546550 const double & E_parent () const { return E_parent_; } // for SA
551+ double & E_pprod () { return E_pprod_; }
552+ const double & E_pprod () const { return E_pprod_; }
547553 int & g () { return g_; }
548554 const int & g () const { return g_; }
549555 int & g_last () { return g_last_; }
@@ -645,8 +651,17 @@ class ParticleData : public GeometryState {
645651 // Used in sensitivity analysis
646652 std::vector<double >& cumulative_sensitivities (int i) { return cumulative_sensitivities_[i]; }
647653 const std::vector<double >& cumulative_sensitivities (int i) const { return cumulative_sensitivities_[i]; }
654+ std::vector<double >& cum_sens (int i) { return cum_sens_[i]; }
655+ const std::vector<double >& cum_sens (int i) const { return cum_sens_[i]; }
656+ std::vector<double >& pprod_sens (int i) { return pprod_sens_[i]; }
657+ const std::vector<double >& pprod_sens (int i) const { return pprod_sens_[i]; }
658+ double neutron_flux_last () const { return neutron_flux_last_; }
659+
648660 int & fission_nuclide () { return fission_nuclide_; }
649661 const int & fission_nuclide () const { return fission_nuclide_; }
662+
663+ int & pprod_nuclide () { return pprod_nuclide_; }
664+ const int & pprod_nuclide () const { return pprod_nuclide_; }
650665
651666 // Matches of tallies
652667 decltype (filter_matches_)& filter_matches () { return filter_matches_; }
@@ -732,6 +747,26 @@ class ParticleData : public GeometryState {
732747 cumulative_sensitivities_[indx].resize (newSize, 0.0 );
733748 }
734749
750+ void resize_init_cum_sens (int newSize)
751+ {
752+ cum_sens_.resize (newSize, {0.0 });
753+ }
754+
755+ void resize_init_cum_sens_vec (int indx, int newSize)
756+ {
757+ cum_sens_[indx].resize (newSize, 0.0 );
758+ }
759+
760+ void resize_init_pprod_sens (int newSize)
761+ {
762+ pprod_sens_.resize (newSize, {0.0 });
763+ }
764+
765+ void resize_init_pprod_sens_vec (int indx, int newSize)
766+ {
767+ pprod_sens_[indx].resize (newSize, 0.0 );
768+ }
769+
735770 void resize_alloc_filter_matches (int newSize)
736771 {
737772 filter_matches_.resize (newSize);
@@ -749,6 +784,25 @@ class ParticleData : public GeometryState {
749784 std::fill (it.begin (), it.end (), 0.0 );
750785 }
751786 }
787+
788+ void initialize_cum_sens ()
789+ {
790+ for (auto & it : cum_sens_){
791+ std::fill (it.begin (), it.end (), 0.0 );
792+ }
793+ }
794+
795+ void initialize_pprod_sens ()
796+ {
797+ for (auto & it : pprod_sens_){
798+ std::fill (it.begin (), it.end (), 0.0 );
799+ }
800+ }
801+
802+ void set_neutron_flux_last (double v)
803+ {
804+ neutron_flux_last_ = v;
805+ }
752806};
753807
754808} // namespace openmc
0 commit comments