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 "MultiAppNeutronicsSpectrumTransfer.h" 10 : #include "MultiApp.h" 11 : #include "FEProblem.h" 12 : #include "MooseTypes.h" 13 : #include "MultiIndex.h" 14 : #include "UserObject.h" 15 : #include "NeutronicsSpectrumSamplerBase.h" 16 : #include "PKAGeneratorNeutronicsBase.h" 17 : 18 : registerMooseObject("MagpieApp", MultiAppNeutronicsSpectrumTransfer); 19 : 20 : InputParameters 21 0 : MultiAppNeutronicsSpectrumTransfer::validParams() 22 : { 23 0 : InputParameters params = MultiAppTransfer::validParams(); 24 0 : params.addRequiredParam<UserObjectName>("pka_neutronics", "PKA generator object name."); 25 0 : params.addRequiredParam<UserObjectName>("radiation_damage_sampler", 26 : "Neutronics user object providing the PDF data."); 27 0 : return params; 28 0 : } 29 : 30 0 : MultiAppNeutronicsSpectrumTransfer::MultiAppNeutronicsSpectrumTransfer( 31 0 : const InputParameters & parameters) 32 : : MultiAppTransfer(parameters), 33 0 : _pka_generator_name(getParam<UserObjectName>("pka_neutronics")), 34 0 : _neutronics_pdf_name(getParam<UserObjectName>("radiation_damage_sampler")) 35 : { 36 0 : if (_direction != TO_MULTIAPP) 37 0 : mooseError("MultiAppNeutronicsSpectrumTransfer can only send data from a neutronics master app " 38 : "to a mesoscale multiapp."); 39 0 : } 40 : 41 : void 42 0 : MultiAppNeutronicsSpectrumTransfer::execute() 43 : { 44 : // get the neutronics PDF user object 45 : FEProblemBase & from_problem = _multi_app->problemBase(); 46 : const NeutronicsSpectrumSamplerBase & neutronics_pdf = 47 0 : from_problem.getUserObject<NeutronicsSpectrumSamplerBase>(_neutronics_pdf_name); 48 : 49 : // loop over all sub apps and copy over the neutronics data 50 0 : for (unsigned int i = 0; i < _multi_app->numGlobalApps(); ++i) 51 0 : if (_multi_app->hasLocalApp(i)) 52 : { 53 0 : std::vector<unsigned int> zaids = neutronics_pdf.getZAIDs(); 54 0 : std::vector<Real> energies = neutronics_pdf.getEnergies(); 55 0 : MultiIndex<Real> probabilities = neutronics_pdf.getPDF(i); 56 : 57 0 : for (THREAD_ID tid = 0; tid < libMesh::n_threads(); ++tid) 58 : { 59 : PKAGeneratorNeutronicsBase & pka_uo = const_cast<PKAGeneratorNeutronicsBase &>( 60 0 : _multi_app->appProblemBase(i).getUserObject<PKAGeneratorNeutronicsBase>( 61 : _pka_generator_name, tid)); 62 0 : pka_uo.setPDF(zaids, energies, probabilities); 63 : } 64 0 : } 65 0 : }