LCOV - code coverage report
Current view: top level - src/userobjects - PKAFissionFragmentNeutronics.C (source / functions) Hit Total Coverage
Test: idaholab/magpie: 5710af Lines: 0 35 0.0 %
Date: 2025-07-21 23:34:39 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /**********************************************************************/
       2             : /*                     DO NOT MODIFY THIS HEADER                      */
       3             : /* MAGPIE - Mesoscale Atomistic Glue Program for Integrated Execution */
       4             : /*                                                                    */
       5             : /*            Copyright 2017 Battelle Energy Alliance, LLC            */
       6             : /*                        ALL RIGHTS RESERVED                         */
       7             : /**********************************************************************/
       8             : 
       9             : #include "PKAFissionFragmentNeutronics.h"
      10             : #include "PKAGeneratorBase.h"
      11             : #include "PKAGeneratorNeutronicsBase.h"
      12             : #include "MultiIndex.h"
      13             : 
      14             : registerMooseObject("MagpieApp", PKAFissionFragmentNeutronics);
      15             : 
      16             : InputParameters
      17           0 : PKAFissionFragmentNeutronics::validParams()
      18             : {
      19           0 :   InputParameters params = PKAGeneratorNeutronicsBase::validParams();
      20           0 :   params.addClassDescription(
      21             :       "PKA generator (fission) user object.\n Takes pdf and samples PKAs due to fission.");
      22           0 :   return params;
      23           0 : }
      24             : 
      25           0 : PKAFissionFragmentNeutronics::PKAFissionFragmentNeutronics(const InputParameters & parameters)
      26           0 :   : PKAGeneratorNeutronicsBase(parameters)
      27             : {
      28           0 : }
      29             : 
      30             : void
      31           0 : PKAFissionFragmentNeutronics::setPDF(const std::vector<unsigned int> & ZAID,
      32             :                                      const std::vector<Real> & energies,
      33             :                                      const MultiIndex<Real> & probabilities)
      34             : {
      35           0 :   _pdf = DiscreteFissionPKAPDF(ZAID, energies, probabilities);
      36           0 : }
      37             : 
      38             : void
      39           0 : PKAFissionFragmentNeutronics::appendPKAs(std::vector<MyTRIM_NS::IonBase> & ion_list,
      40             :                                          const MyTRIMRasterizer::PKAParameters & pka_parameters,
      41             :                                          const MyTRIMRasterizer::AveragedData & averaged_data) const
      42             : {
      43           0 :   const auto dt = pka_parameters._dt;
      44           0 :   const auto vol = pka_parameters._volume;
      45           0 :   const auto recoil_rate_scaling = pka_parameters._recoil_rate_scaling;
      46             : 
      47             :   mooseAssert(dt >= 0,
      48             :               "Passed a negative time window into PKAFissionFragmentNeutronics::appendPKAs");
      49             :   mooseAssert(vol >= 0, "Passed a negative volume into PKAFissionFragmentNeutronics::appendPKAs");
      50             : 
      51           0 :   if (averaged_data._elements.size() != _partial_neutronics_reaction_rates.size())
      52           0 :     mooseError("Size of averaged_data and partial_reaction_rates must be equal");
      53             : 
      54           0 :   for (unsigned int nuclide = 0; nuclide < _partial_neutronics_reaction_rates.size(); ++nuclide)
      55             :   {
      56             :     unsigned int num_fission =
      57           0 :         std::floor(recoil_rate_scaling * dt * vol * (*_partial_neutronics_reaction_rates[nuclide]) /
      58           0 :                        (*_averaged_number_densities[nuclide] * averaged_data._site_volume) *
      59             :                        averaged_data._elements[nuclide] +
      60           0 :                    getRandomReal());
      61             : 
      62           0 :     for (unsigned i = 0; i < num_fission; ++i)
      63             :     {
      64             :       std::vector<MyTRIM_NS::IonBase> ion;
      65             :       // at this point sample will have Z, m, E
      66           0 :       _pdf.drawSample(ion);
      67             : 
      68             :       // set stopping criteria
      69           0 :       ion[0].setEf();
      70           0 :       ion[1].setEf();
      71             : 
      72             :       // the tag is the element this PKA get registered as upon stopping
      73             :       // -1 means the PKA will be ignored
      74           0 :       ion[0]._tag = ionTag(pka_parameters, ion[0]._Z, ion[0]._m);
      75           0 :       ion[1]._tag = ionTag(pka_parameters, ion[1]._Z, ion[1]._m);
      76             : 
      77             :       // set location of the fission event
      78           0 :       setPosition(ion[0]);
      79           0 :       ion[1]._pos = ion[0]._pos;
      80             : 
      81             :       // set random direction for ion 1 and opposite direction for ion 2
      82           0 :       setRandomDirection(ion[0]);
      83           0 :       ion[1]._dir = -ion[0]._dir;
      84             : 
      85             :       // add PKAs to list
      86           0 :       ion_list.push_back(ion[0]);
      87           0 :       ion_list.push_back(ion[1]);
      88           0 :     }
      89             :   }
      90           0 : }

Generated by: LCOV version 1.14