Line data Source code
1 : /********************************************************************/ 2 : /* SOFTWARE COPYRIGHT NOTIFICATION */ 3 : /* Cardinal */ 4 : /* */ 5 : /* (c) 2021 UChicago Argonne, LLC */ 6 : /* ALL RIGHTS RESERVED */ 7 : /* */ 8 : /* Prepared by UChicago Argonne, LLC */ 9 : /* Under Contract No. DE-AC02-06CH11357 */ 10 : /* With the U. S. Department of Energy */ 11 : /* */ 12 : /* Prepared by Battelle Energy Alliance, LLC */ 13 : /* Under Contract No. DE-AC07-05ID14517 */ 14 : /* With the U. S. Department of Energy */ 15 : /* */ 16 : /* See LICENSE for full restrictions */ 17 : /********************************************************************/ 18 : 19 : #ifdef ENABLE_OPENMC_COUPLING 20 : 21 : #include "ParticleFilter.h" 22 : 23 : #include "CardinalEnums.h" 24 : 25 : #include "openmc/tallies/filter_particle.h" 26 : 27 : registerMooseObject("CardinalApp", ParticleFilter); 28 : 29 : InputParameters 30 152 : ParticleFilter::validParams() 31 : { 32 152 : auto params = FilterBase::validParams(); 33 152 : params.addClassDescription( 34 : "A class which provides a thin wrapper around an OpenMC ParticleFilter."); 35 304 : params.addRequiredParam<MultiMooseEnum>( 36 304 : "particles", getParticleFilterEnums(), "The particles to filter for."); 37 : 38 152 : return params; 39 0 : } 40 : 41 76 : ParticleFilter::ParticleFilter(const InputParameters & parameters) : FilterBase(parameters) 42 : { 43 252 : for (const auto & m_enum : getParam<MultiMooseEnum>("particles")) 44 : { 45 100 : _particles.emplace_back(m_enum); 46 : 47 : // Need to convert MultiMooseEnum values (all upper case characters) to lower case characters. 48 100 : std::transform(_particles.back().begin(), 49 : _particles.back().end(), 50 : _particles.back().begin(), 51 700 : [](unsigned char c) { return std::tolower(c); }); 52 : } 53 152 : auto particle_filter = dynamic_cast<openmc::ParticleFilter *>(openmc::Filter::create("particle")); 54 : 55 : std::vector<openmc::ParticleType> p; 56 176 : for (const auto & ps : _particles) 57 200 : p.emplace_back(openmc::str_to_particle_type(ps)); 58 : 59 76 : particle_filter->set_particles(p); 60 76 : _filter = particle_filter; 61 76 : } 62 : 63 : std::string 64 808 : ParticleFilter::binName(unsigned int bin_index) const 65 : { 66 808 : return _particles[bin_index]; 67 : } 68 : 69 : #endif