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 "AdaptiveSamplerAction.h" 11 : #include "AddSamplerAction.h" 12 : #include "FEProblem.h" 13 : 14 : registerMooseAction("StochasticToolsApp", AdaptiveSamplerAction, "add_user_object"); 15 : registerMooseAction("StochasticToolsApp", AdaptiveSamplerAction, "add_postprocessor"); 16 : 17 : InputParameters 18 5394 : AdaptiveSamplerAction::validParams() 19 : { 20 5394 : InputParameters params = Action::validParams(); 21 5394 : params.addClassDescription("Adds extra objects pertaining to adaptive samplers."); 22 5394 : return params; 23 0 : } 24 : 25 5394 : AdaptiveSamplerAction::AdaptiveSamplerAction(const InputParameters & params) : Action(params) {} 26 : 27 : void 28 5332 : AdaptiveSamplerAction::act() 29 : { 30 5332 : const auto samplers = _app.actionWarehouse().getActions<AddSamplerAction>(); 31 : SamplerName sampler_name; 32 : 33 : // determine whether the sampler is an adaptive sampler 34 11560 : for (auto & sampler : samplers) 35 12456 : if (adaptiveSamplerNames().count(sampler->getMooseObjectType()) > 0) 36 : { 37 146 : if (!sampler_name.empty()) 38 0 : mooseError("The case with multiple adaptive samplers is not currently supported"); 39 292 : sampler_name = sampler->name(); 40 : } 41 : 42 5332 : if (sampler_name.empty()) 43 : return; 44 : 45 146 : if (_current_task == "add_user_object") 46 : { 47 146 : InputParameters params = _factory.getValidParams("Terminator"); 48 146 : params.set<std::string>("expression") = adaptiveSamplingCompletedPostprocessorName() + " > 0"; 49 73 : params.set<std::string>("message") = "Sampling completed!"; 50 219 : params.set<ExecFlagEnum>("execute_on") = {EXEC_TIMESTEP_END}; 51 146 : _problem->addUserObject("Terminator", "_terminate" + sampler_name, params); 52 73 : } 53 73 : else if (_current_task == "add_postprocessor") 54 : { 55 73 : InputParameters params = _factory.getValidParams("AdaptiveSamplingCompletedPostprocessor"); 56 73 : params.set<SamplerName>("sampler") = sampler_name; 57 219 : params.set<ExecFlagEnum>("execute_on") = {EXEC_TIMESTEP_END}; 58 219 : params.set<std::vector<OutputName>>("outputs") = {"none"}; 59 146 : _problem->addUserObject("AdaptiveSamplingCompletedPostprocessor", 60 73 : adaptiveSamplingCompletedPostprocessorName(), 61 : params); 62 73 : } 63 5478 : }