From 38cf6382fdbc3e1676f0d5feba30bc23a18350f3 Mon Sep 17 00:00:00 2001
From: Sebastian Schunert <sebastian.schunert@inl.gov>
Date: Thu, 9 Aug 2018 10:37:08 -0600
Subject: [PATCH] mass number matching (#300)

---
 include/userobjects/MyTRIMRasterizer.h        |   6 +-
 include/userobjects/PKAGeneratorBase.h        |   1 +
 src/userobjects/MyTRIMRasterizer.C            |  13 +++
 src/userobjects/PKAEmpiricalBase.C            |   2 +-
 src/userobjects/PKAFissionFragmentEmpirical.C |   4 +-
 .../PKAFissionFragmentNeutronics.C            |   6 +-
 src/userobjects/PKAFixedPointGenerator.C      |   3 +-
 src/userobjects/PKAGeneratorAlphaDecay.C      |   6 +-
 src/userobjects/PKAGeneratorBase.C            |  37 +++----
 .../gold/tagging_all_Xe_out.e                 | Bin 0 -> 36624 bytes
 tests/polyatomic_cascade/gold/tagging_out.e   | Bin 0 -> 36532 bytes
 tests/polyatomic_cascade/tagging.i            | 103 ++++++++++++++++++
 tests/polyatomic_cascade/tests                |  15 +++
 13 files changed, 167 insertions(+), 29 deletions(-)
 create mode 100644 tests/polyatomic_cascade/gold/tagging_all_Xe_out.e
 create mode 100644 tests/polyatomic_cascade/gold/tagging_out.e
 create mode 100644 tests/polyatomic_cascade/tagging.i

diff --git a/include/userobjects/MyTRIMRasterizer.h b/include/userobjects/MyTRIMRasterizer.h
index 51eb5fb3..f5541b23 100644
--- a/include/userobjects/MyTRIMRasterizer.h
+++ b/include/userobjects/MyTRIMRasterizer.h
@@ -58,13 +58,14 @@ class MyTRIMRasterizer : public ElementUserObject
   struct AveragedData
   {
     AveragedData(unsigned int nvars = 0)
-      : _elements(nvars, 0.0), _Z(nvars, 0.0), _M(nvars, 0.0), _site_volume(0.0)
+      : _elements(nvars, 0.0), _Z(nvars, 0.0), _M(nvars, 0.0), _M_tol(nvars, 0.5), _site_volume(0.0)
     {
     }
 
     std::vector<Real> _elements;
     std::vector<Real> _Z;
     std::vector<Real> _M;
+    std::vector<Real> _M_tol;
     Real _site_volume;
   };
 
@@ -86,6 +87,9 @@ class MyTRIMRasterizer : public ElementUserObject
     // Element prototype data (charge, mass, displacement and binding energies)
     std::vector<MyTRIM_NS::Element> element_prototypes;
 
+    /// tolerance for matching mass numbers for tagging
+    std::vector<Real> mtol;
+
     /// conversion factor from chosen length unit to Angstrom
     Real length_scale;
 
diff --git a/include/userobjects/PKAGeneratorBase.h b/include/userobjects/PKAGeneratorBase.h
index f1e156a0..a3dd1b6d 100644
--- a/include/userobjects/PKAGeneratorBase.h
+++ b/include/userobjects/PKAGeneratorBase.h
@@ -56,6 +56,7 @@ class PKAGeneratorBase : public DiscreteElementUserObject
   /// finds the right ion tag; -1 means that the nuclide is not tracked, otherwise the index in the rasterizer nuclide vector must be retrieved
   int ionTag(const std::vector<Real> & rasterizer_Z,
              const std::vector<Real> & rasterizer_m,
+             const std::vector<Real> & mass_number_tolerance,
              Real Z,
              Real m) const;
 };
diff --git a/src/userobjects/MyTRIMRasterizer.C b/src/userobjects/MyTRIMRasterizer.C
index 81fb1ca8..33971ea3 100644
--- a/src/userobjects/MyTRIMRasterizer.C
+++ b/src/userobjects/MyTRIMRasterizer.C
@@ -76,6 +76,8 @@ InputParameters validParams<MyTRIMRasterizer>()
   params.addCoupledVar("periodic_var", "Optional variables that determines the periodicity. If not supplied the first argument of 'var' will be used.");
   params.addRequiredParam<std::vector<Real>>("M", "Element mass in amu");
   params.addRequiredParam<std::vector<Real>>("Z", "Nuclear charge in e");
+  params.addParam<std::vector<Real>>("Mtol",
+                                     "Tolerance on mass number for tagging PKAs with var id.");
   params.addParam<std::vector<Real>>("Ebind", "Binding energy in eV");
   params.addParam<std::vector<Real>>("Edisp", "Displacement threshold in eV");
   params.addRequiredParam<MaterialPropertyName>("site_volume", "Lattice site volume in nm^3 (regardless of the chosen mesh units)");
@@ -141,6 +143,16 @@ MyTRIMRasterizer::MyTRIMRasterizer(const InputParameters & parameters) :
   if (trim_Z.size() != _nvars)
     mooseError("Parameter 'Z' must have as many components as coupled variables.");
 
+  if (isParamValid("Mtol"))
+  {
+    _trim_parameters.mtol = getParam<std::vector<Real>>("Mtol");
+    if (_trim_parameters.mtol.size() != _nvars)
+      mooseError(
+          "Parameter 'Mtol' (if provided) must have as many components as coupled variables.");
+  }
+  else
+    _trim_parameters.mtol.assign(_nvars, 0.5);
+
   for (unsigned int i = 0; i < _nvars; ++i)
       if (trim_Z[i] > trim_M[i])
         mooseError("Value of Z is larger than value of M for entry ", i);
@@ -265,6 +277,7 @@ MyTRIMRasterizer::execute()
       average._elements[i] += qpvol * (*_var[i])[qp];
       average._M[i] = _trim_parameters.element_prototypes[i]._m;
       average._Z[i] = _trim_parameters.element_prototypes[i]._Z;
+      average._M_tol[i] = _trim_parameters.mtol[i];
     }
 
     // average site volume property
diff --git a/src/userobjects/PKAEmpiricalBase.C b/src/userobjects/PKAEmpiricalBase.C
index 455c8d0a..63f59ac3 100644
--- a/src/userobjects/PKAEmpiricalBase.C
+++ b/src/userobjects/PKAEmpiricalBase.C
@@ -30,7 +30,7 @@ PKAEmpiricalBase::appendPKAs(std::vector<MyTRIM_NS::IonBase> & ion_list, Real dt
   const Real m = getM();
   const Real E = getE();
 
-  int tag = ionTag(averaged_data._Z, averaged_data._M, Z, m);
+  int tag = ionTag(averaged_data._Z, averaged_data._M, averaged_data._M_tol, Z, m);
 
   unsigned int num_pka = std::floor(recoil_rate_scaling * dt * vol * getPKARate() + getRandomReal());
 
diff --git a/src/userobjects/PKAFissionFragmentEmpirical.C b/src/userobjects/PKAFissionFragmentEmpirical.C
index 456ac784..7874d9f3 100644
--- a/src/userobjects/PKAFissionFragmentEmpirical.C
+++ b/src/userobjects/PKAFissionFragmentEmpirical.C
@@ -64,8 +64,8 @@ PKAFissionFragmentEmpirical::appendPKAs(std::vector<MyTRIM_NS::IonBase> & ion_li
 
     // the tag is the element this PKA get registered as upon stopping
     // -1 means the PKA will be ignored
-    ion1._tag = ionTag(averaged_data._Z, averaged_data._M, ion1._Z, ion1._m);
-    ion2._tag = ionTag(averaged_data._Z, averaged_data._M, ion2._Z, ion2._m);
+    ion1._tag = ionTag(averaged_data._Z, averaged_data._M, averaged_data._M_tol, ion1._Z, ion1._m);
+    ion2._tag = ionTag(averaged_data._Z, averaged_data._M, averaged_data._M_tol, ion2._Z, ion2._m);
 
     // set location of the fission event
     setPosition(ion1);
diff --git a/src/userobjects/PKAFissionFragmentNeutronics.C b/src/userobjects/PKAFissionFragmentNeutronics.C
index c6a1a69d..12e7f724 100644
--- a/src/userobjects/PKAFissionFragmentNeutronics.C
+++ b/src/userobjects/PKAFissionFragmentNeutronics.C
@@ -59,8 +59,10 @@ PKAFissionFragmentNeutronics::appendPKAs(std::vector<MyTRIM_NS::IonBase> & ion_l
 
       // the tag is the element this PKA get registered as upon stopping
       // -1 means the PKA will be ignored
-      ion[0]._tag = ionTag(averaged_data._Z, averaged_data._M, ion[0]._Z, ion[0]._m);
-      ion[1]._tag = ionTag(averaged_data._Z, averaged_data._M, ion[1]._Z, ion[1]._m);
+      ion[0]._tag =
+          ionTag(averaged_data._Z, averaged_data._M, averaged_data._M_tol, ion[0]._Z, ion[0]._m);
+      ion[1]._tag =
+          ionTag(averaged_data._Z, averaged_data._M, averaged_data._M_tol, ion[1]._Z, ion[1]._m);
 
       // set location of the fission event
       setPosition(ion[0]);
diff --git a/src/userobjects/PKAFixedPointGenerator.C b/src/userobjects/PKAFixedPointGenerator.C
index 0046282c..5f37a497 100644
--- a/src/userobjects/PKAFixedPointGenerator.C
+++ b/src/userobjects/PKAFixedPointGenerator.C
@@ -59,7 +59,8 @@ PKAFixedPointGenerator::appendPKAs(std::vector<MyTRIM_NS::IonBase> & ion_list, R
 
     // the tag is the element this PKA get registered as upon stopping
     // -1 means the PKA will be ignored
-    pka._tag = ionTag(averaged_data._Z, averaged_data._M, pka._Z, pka._m);;
+    pka._tag = ionTag(averaged_data._Z, averaged_data._M, averaged_data._M_tol, pka._Z, pka._m);
+    ;
 
     // set stopping criteria
     pka.setEf();
diff --git a/src/userobjects/PKAGeneratorAlphaDecay.C b/src/userobjects/PKAGeneratorAlphaDecay.C
index a182a5c3..4f98870a 100644
--- a/src/userobjects/PKAGeneratorAlphaDecay.C
+++ b/src/userobjects/PKAGeneratorAlphaDecay.C
@@ -155,8 +155,10 @@ PKAGeneratorAlphaDecay::appendPKAs(std::vector<MyTRIM_NS::IonBase> & ion_list, R
         ion[1]._Z = parent_Z - 2;
         ion[1]._m = parent_A - 4;
 
-        ion[0]._tag = ionTag(averaged_data._Z, averaged_data._M, ion[0]._Z, ion[0]._m);
-        ion[1]._tag = ionTag(averaged_data._Z, averaged_data._M, ion[1]._Z, ion[1]._m);
+        ion[0]._tag =
+            ionTag(averaged_data._Z, averaged_data._M, averaged_data._M_tol, ion[0]._Z, ion[0]._m);
+        ion[1]._tag =
+            ionTag(averaged_data._Z, averaged_data._M, averaged_data._M_tol, ion[1]._Z, ion[1]._m);
 
         // set the energies; use momentum conservation
         ion[0]._E = decay[l]._alpha_energies;
diff --git a/src/userobjects/PKAGeneratorBase.C b/src/userobjects/PKAGeneratorBase.C
index 0841e27d..dfc03c22 100644
--- a/src/userobjects/PKAGeneratorBase.C
+++ b/src/userobjects/PKAGeneratorBase.C
@@ -10,16 +10,18 @@
 #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.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)
 {
   setRandomResetFrequency(EXEC_TIMESTEP_END);
 }
@@ -31,22 +33,17 @@ 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,
+                         const std::vector<Real> & mass_number_tolerance,
+                         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]
-  unsigned int count = std::count(rasterizer_Z.begin(), rasterizer_Z.end(), Z);
-  if (count == 1)
-  {
-    const auto & it = std::find(rasterizer_Z.begin(), rasterizer_Z.end(), Z);
-    mooseAssert(it != rasterizer_Z.end(), "Z position in rasterizer_Z was unexpectedly not found");
-    unsigned int index = std::distance(rasterizer_Z.begin(), it);
-    return index;
-  }
-  else if (count > 1)
-    for (unsigned int j = 0; j < rasterizer_Z.size(); ++j)
-      if (rasterizer_Z[j] == Z && rasterizer_m[j] == m)
-        return j;
+  // this function relies on the exact representation of whole numbers in IEEE floating point
+  // numbers up to a reasonable upper limit [Z < m < 300]
+  for (unsigned int j = 0; j < rasterizer_Z.size(); ++j)
+    if (rasterizer_Z[j] == Z && std::abs(rasterizer_m[j] - m) < mass_number_tolerance[j])
+      return j;
   return -1;
 }
 
diff --git a/tests/polyatomic_cascade/gold/tagging_all_Xe_out.e b/tests/polyatomic_cascade/gold/tagging_all_Xe_out.e
new file mode 100644
index 0000000000000000000000000000000000000000..177c0e008948ce0643adbd5d0fb2e1d1b4fa8207
GIT binary patch
literal 36624
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

literal 0
HcmV?d00001

diff --git a/tests/polyatomic_cascade/gold/tagging_out.e b/tests/polyatomic_cascade/gold/tagging_out.e
new file mode 100644
index 0000000000000000000000000000000000000000..67410076761924791ef4f4814728840734c917b9
GIT binary patch
literal 36532
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

literal 0
HcmV?d00001

diff --git a/tests/polyatomic_cascade/tagging.i b/tests/polyatomic_cascade/tagging.i
new file mode 100644
index 00000000..8d92c155
--- /dev/null
+++ b/tests/polyatomic_cascade/tagging.i
@@ -0,0 +1,103 @@
+[Mesh]
+  type = MyTRIMMesh
+  dim = 3
+  nx = 2
+  ny = 2
+  nz = 2
+  xmin = 0
+  xmax = 100
+  ymin = 0
+  ymax = 100
+  zmin = 0
+  zmax = 100
+[]
+
+[Problem]
+  kernel_coverage_check = false
+[]
+
+[Variables]
+  [./dummy]
+  [../]
+[]
+
+[AuxVariables]
+  [./cC]
+    order = CONSTANT
+    family = MONOMIAL
+    initial_condition = 0.5
+  [../]
+  [./cSi]
+    order = CONSTANT
+    family = MONOMIAL
+    initial_condition = 0.5
+  [../]
+  [./cXe]
+    order = CONSTANT
+    family = MONOMIAL
+    initial_condition = 0.0
+  [../]
+
+  [./int]
+    order = CONSTANT
+    family = MONOMIAL
+  [../]
+[]
+
+[AuxKernels]
+  [./int]
+    variable = int
+    type = MyTRIMElementResultAux
+    runner = runner
+    ivar = 2
+    defect = INT
+  [../]
+[]
+
+[BCs]
+  [./Periodic]
+    [./all]
+      auto_direction = 'x y z'
+    [../]
+  [../]
+[]
+
+[UserObjects]
+  [./ffe]
+    type = PKAFissionFragmentEmpirical
+    fission_rate = 0.00001
+    relative_density = 1
+  [../]
+  [./rasterizer]
+    type = MyTRIMRasterizer
+    var = 'cC cSi cXe'
+    M =   '12 28  136'
+    Z =   '6  14  54'
+    # MTol = '0.5 0.5 4'
+    site_volume = 0.0404
+    pka_generator = ffe
+    periodic_var = dummy
+    analytical_energy_cutoff = 1e5
+  [../]
+  [./runner]
+    type = MyTRIMElementRun
+    rasterizer = rasterizer
+  [../]
+[]
+
+[Postprocessors]
+  [./total_vacancies]
+    type = ElementIntegralVariablePostprocessor
+    variable = int
+  [../]
+[]
+
+[Executioner]
+  type = Transient
+  num_steps = 1
+  nl_abs_tol = 1e-10
+[]
+
+[Outputs]
+  exodus = true
+[]
diff --git a/tests/polyatomic_cascade/tests b/tests/polyatomic_cascade/tests
index 25222cce..97ea75c9 100644
--- a/tests/polyatomic_cascade/tests
+++ b/tests/polyatomic_cascade/tests
@@ -38,4 +38,19 @@
     recover = false
     cli_args = "Outputs/file_base=polyatomic_cascade_recoil_scaled_out UserObjects/constant/pka_rate=0.01 UserObjects/rasterizer/max_pka_count=1000 UserObjects/rasterizer/recoil_rate_scaling=0.8"
   [../]
+  [./tagging_default]
+    type = 'Exodiff'
+    input = 'tagging.i'
+    exodiff = 'tagging_out.e'
+    abs_zero = 1e-6
+    recover = false
+  [../]
+  [./tagging_all_Xe]
+    type = 'Exodiff'
+    input = 'tagging.i'
+    exodiff = 'tagging_all_Xe_out.e'
+    abs_zero = 1e-6
+    cli_args = "Outputs/file_base=tagging_all_Xe_out UserObjects/rasterizer/Mtol='0.5 0.5 4'"
+    recover = false
+  [../]
 []