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 : // Stocastic Tools Includes 11 : #include "StochasticReporter.h" 12 : #include "Sampler.h" 13 : 14 : registerMooseObject("StochasticToolsApp", StochasticReporter); 15 : 16 : InputParameters 17 8002 : StochasticReporter::validParams() 18 : { 19 8002 : InputParameters params = GeneralReporter::validParams(); 20 8002 : params.addClassDescription( 21 : "Storage container for stochastic simulation results coming from Reporters."); 22 16004 : MooseEnum parallel_type("DISTRIBUTED=0 ROOT=1", "DISTRIBUTED"); 23 16004 : params.addParam<MooseEnum>( 24 : "parallel_type", 25 : parallel_type, 26 : "This parameter will determine how the stochastic data is gathered. It is common for " 27 : "outputting purposes that this parameter be set to ROOT, otherwise, many files will be " 28 : "produced showing the values on each processor. However, if there are lot of samples, " 29 : "gathering on root may be memory restrictive."); 30 8002 : params.set<ExecFlagEnum>("execute_on", true).addAvailableFlags(EXEC_TRANSFER); 31 8002 : return params; 32 8002 : } 33 : 34 3983 : StochasticReporter::StochasticReporter(const InputParameters & parameters) 35 7966 : : GeneralReporter(parameters), _parallel_type(getParam<MooseEnum>("parallel_type")) 36 : { 37 3983 : } 38 : 39 : void 40 11106 : StochasticReporter::initialize() 41 : { 42 45264 : for (auto & vector : _vectors) 43 34158 : vector->initialize(); 44 11106 : } 45 : 46 : ReporterName 47 4625 : StochasticReporter::declareStochasticReporterClone(const Sampler & sampler, 48 : const ReporterData & from_data, 49 : const ReporterName & from_reporter, 50 : std::string prefix) 51 : { 52 4625 : std::string value_name = (prefix.empty() ? "" : prefix + ":") + from_reporter.getObjectName() + 53 9250 : ":" + from_reporter.getValueName(); 54 : 55 4625 : if (!from_data.hasReporterValue(from_reporter)) 56 0 : mooseError("Reporter value ", from_reporter, " has not been declared."); 57 : 58 : // Single quantities 59 4625 : if (from_data.hasReporterValue<bool>(from_reporter)) 60 0 : declareStochasticReporter<bool>(value_name, sampler); 61 4625 : else if (from_data.hasReporterValue<int>(from_reporter)) 62 190 : declareStochasticReporter<int>(value_name, sampler); 63 4530 : else if (from_data.hasReporterValue<Real>(from_reporter)) 64 7938 : declareStochasticReporter<Real>(value_name, sampler); 65 561 : else if (from_data.hasReporterValue<std::string>(from_reporter)) 66 156 : declareStochasticReporter<std::string>(value_name, sampler); 67 : // Vector quantities 68 483 : else if (from_data.hasReporterValue<std::vector<bool>>(from_reporter)) 69 0 : declareStochasticReporter<std::vector<bool>>(value_name, sampler); 70 483 : else if (from_data.hasReporterValue<std::vector<int>>(from_reporter)) 71 0 : declareStochasticReporter<std::vector<int>>(value_name, sampler); 72 483 : else if (from_data.hasReporterValue<std::vector<Real>>(from_reporter)) 73 958 : declareStochasticReporter<std::vector<Real>>(value_name, sampler); 74 4 : else if (from_data.hasReporterValue<std::vector<std::string>>(from_reporter)) 75 0 : declareStochasticReporter<std::vector<std::string>>(value_name, sampler); 76 : // Vector of vector quantities 77 4 : else if (from_data.hasReporterValue<std::vector<std::vector<bool>>>(from_reporter)) 78 0 : declareStochasticReporter<std::vector<std::vector<bool>>>(value_name, sampler); 79 4 : else if (from_data.hasReporterValue<std::vector<std::vector<int>>>(from_reporter)) 80 0 : declareStochasticReporter<std::vector<std::vector<int>>>(value_name, sampler); 81 4 : else if (from_data.hasReporterValue<std::vector<std::vector<Real>>>(from_reporter)) 82 0 : declareStochasticReporter<std::vector<std::vector<Real>>>(value_name, sampler); 83 4 : else if (from_data.hasReporterValue<std::vector<std::vector<std::string>>>(from_reporter)) 84 0 : declareStochasticReporter<std::vector<std::vector<std::string>>>(value_name, sampler); 85 : else 86 : return {}; // Empty ReporterName to show that reporter value is unsupported type 87 : 88 4621 : return {name(), value_name}; 89 : }