Skip to content

Commit

Permalink
mass number matching (idaholab#300)
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebastian Schunert committed Aug 9, 2018
1 parent 6ce13e3 commit 55da0b2
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 9 deletions.
3 changes: 3 additions & 0 deletions include/userobjects/PKAGeneratorBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ class PKAGeneratorBase : public DiscreteElementUserObject
const std::vector<Real> & rasterizer_m,
Real Z,
Real m) const;

/// tolerance for mass number matching during tagging
const Real _mass_number_tolerance;
};

#endif // PKAGENERATORBASE_H
27 changes: 18 additions & 9 deletions src/userobjects/PKAGeneratorBase.C
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,22 @@
#include "MagpieUtils.h"
#include <algorithm>

template<>
InputParameters validParams<PKAGeneratorBase>()
template <>
InputParameters
validParams<PKAGeneratorBase>()
{
InputParameters params = validParams<DiscreteElementUserObject>();
params.addClassDescription("PKA generator user object base class.\n Takes pdf and samples PKAs due to various interactions.");
params.addParam<Real>("mass_number_tolerance",
0.5,
"Tolerance for matching mass numbers of recoils with rasterizer isotopes.");
params.addClassDescription("PKA generator user object base class.\n Takes pdf and samples PKAs "
"due to various interactions.");
return params;
}

PKAGeneratorBase::PKAGeneratorBase(const InputParameters & parameters) :
DiscreteElementUserObject(parameters)
PKAGeneratorBase::PKAGeneratorBase(const InputParameters & parameters)
: DiscreteElementUserObject(parameters),
_mass_number_tolerance(getParam<Real>("mass_number_tolerance"))
{
setRandomResetFrequency(EXEC_TIMESTEP_END);
}
Expand All @@ -31,10 +37,13 @@ PKAGeneratorBase::setPosition(MyTRIM_NS::IonBase & ion) const
}

int
PKAGeneratorBase::ionTag(const std::vector<Real> & rasterizer_Z, const std::vector<Real> & rasterizer_m, Real Z, Real m) const
PKAGeneratorBase::ionTag(const std::vector<Real> & rasterizer_Z,
const std::vector<Real> & rasterizer_m,
Real Z,
Real m) const
{
// this function relies on the exact representation of whole numbers in IEEE floating point numbers
// up to a reasonable upper limit [Z < m < 300]
// this function relies on the exact representation of whole numbers in IEEE floating point
// numbers up to a reasonable upper limit [Z < m < 300]
unsigned int count = std::count(rasterizer_Z.begin(), rasterizer_Z.end(), Z);
if (count == 1)
{
Expand All @@ -45,7 +54,7 @@ PKAGeneratorBase::ionTag(const std::vector<Real> & rasterizer_Z, const std::vect
}
else if (count > 1)
for (unsigned int j = 0; j < rasterizer_Z.size(); ++j)
if (rasterizer_Z[j] == Z && rasterizer_m[j] == m)
if (rasterizer_Z[j] == Z && std::abs(rasterizer_m[j] - m) < _mass_number_tolerance)
return j;
return -1;
}
Expand Down

0 comments on commit 55da0b2

Please sign in to comment.