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 11949635 : RandomInterface::validParams() 19 : { 20 : 21 11949635 : InputParameters params = emptyInputParameters(); 22 11949635 : params.addParam<unsigned int>("seed", 0, "The seed for the master random number generator"); 23 : 24 11949635 : params.addParamNamesToGroup("seed", "Advanced"); 25 11949635 : return params; 26 0 : } 27 : 28 320569 : RandomInterface::RandomInterface(const InputParameters & parameters, 29 : FEProblemBase & problem, 30 : THREAD_ID tid, 31 320569 : bool is_nodal) 32 320569 : : _random_data(nullptr), 33 320569 : _generator(nullptr), 34 320569 : _ri_problem(problem), 35 320569 : _ri_name(parameters.get<std::string>("_object_name")), 36 320569 : _master_seed(parameters.get<unsigned int>("seed")), 37 320569 : _is_nodal(is_nodal), 38 320569 : _reset_on(EXEC_LINEAR), 39 320569 : _curr_node(problem.assembly(tid, 0).node()), 40 320569 : _curr_element(problem.assembly(tid, 0).elem()) 41 : { 42 320569 : } 43 : 44 306228 : RandomInterface::~RandomInterface() {} 45 : 46 : void 47 419 : RandomInterface::setRandomResetFrequency(ExecFlagType exec_flag) 48 : { 49 419 : _reset_on = exec_flag; 50 419 : _ri_problem.registerRandomInterface(*this, _ri_name); 51 419 : } 52 : 53 : void 54 419 : RandomInterface::setRandomDataPointer(RandomData * random_data) 55 : { 56 419 : _random_data = random_data; 57 419 : _generator = &_random_data->getGenerator(); 58 419 : } 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 2552448 : RandomInterface::getRandomLong() const 70 : { 71 : mooseAssert(_generator, "Random Generator is NULL, did you call setRandomResetFrequency()?"); 72 : 73 : dof_id_type id; 74 2552448 : if (_is_nodal) 75 0 : id = _curr_node->id(); 76 : else 77 2552448 : id = _curr_element->id(); 78 : 79 2552448 : return _generator->randl(id); 80 : } 81 : 82 : Real 83 2045408 : RandomInterface::getRandomReal() const 84 : { 85 : mooseAssert(_generator, "Random Generator is NULL, did you call setRandomResetFrequency()?"); 86 : 87 : dof_id_type id; 88 2045408 : if (_is_nodal) 89 212960 : id = _curr_node->id(); 90 : else 91 1832448 : id = _curr_element->id(); 92 : 93 2045408 : return _generator->rand(id); 94 : }