Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #include "Moose.h" 11 : #include "RandomInterface.h" 12 : #include "RandomData.h" 13 : #include "MooseRandom.h" 14 : #include "FEProblemBase.h" 15 : #include "Assembly.h" 16 : 17 : InputParameters 18 12007923 : RandomInterface::validParams() 19 : { 20 : 21 12007923 : InputParameters params = emptyInputParameters(); 22 12007923 : params.addParam<unsigned int>("seed", 0, "The seed for the master random number generator"); 23 : 24 12007923 : params.addParamNamesToGroup("seed", "Advanced"); 25 12007923 : return params; 26 0 : } 27 : 28 343206 : RandomInterface::RandomInterface(const InputParameters & parameters, 29 : FEProblemBase & problem, 30 : THREAD_ID tid, 31 343206 : bool is_nodal) 32 343206 : : _random_data(nullptr), 33 343206 : _generator(nullptr), 34 343206 : _ri_problem(problem), 35 343206 : _ri_name(parameters.get<std::string>("_object_name")), 36 343206 : _master_seed(parameters.get<unsigned int>("seed")), 37 343206 : _is_nodal(is_nodal), 38 343206 : _reset_on(EXEC_LINEAR), 39 343206 : _curr_node(problem.assembly(tid, 0).node()), 40 343206 : _curr_element(problem.assembly(tid, 0).elem()) 41 : { 42 343206 : } 43 : 44 328711 : RandomInterface::~RandomInterface() {} 45 : 46 : void 47 456 : RandomInterface::setRandomResetFrequency(ExecFlagType exec_flag) 48 : { 49 456 : _reset_on = exec_flag; 50 456 : _ri_problem.registerRandomInterface(*this, _ri_name); 51 456 : } 52 : 53 : void 54 456 : RandomInterface::setRandomDataPointer(RandomData * random_data) 55 : { 56 456 : _random_data = random_data; 57 456 : _generator = &_random_data->getGenerator(); 58 456 : } 59 : 60 : unsigned int 61 0 : RandomInterface::getSeed(std::size_t id) 62 : { 63 : mooseAssert(_random_data, "RandomData object is NULL!"); 64 : 65 0 : return _random_data->getSeed(id); 66 : } 67 : 68 : unsigned long 69 2666048 : RandomInterface::getRandomLong() const 70 : { 71 : mooseAssert(_generator, "Random Generator is NULL, did you call setRandomResetFrequency()?"); 72 : 73 : dof_id_type id; 74 2666048 : if (_is_nodal) 75 0 : id = _curr_node->id(); 76 : else 77 2666048 : id = _curr_element->id(); 78 : 79 2666048 : return _generator->randl(id); 80 : } 81 : 82 : Real 83 2082952 : RandomInterface::getRandomReal() const 84 : { 85 : mooseAssert(_generator, "Random Generator is NULL, did you call setRandomResetFrequency()?"); 86 : 87 : dof_id_type id; 88 2082952 : if (_is_nodal) 89 244904 : id = _curr_node->id(); 90 : else 91 1838048 : id = _curr_element->id(); 92 : 93 2082952 : return _generator->rand(id); 94 : }