www.mooseframework.org
PolycrystalVoronoiVoidICAction.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
12 #include "Factory.h"
13 #include "FEProblem.h"
14 #include "Conversion.h"
15 
16 registerMooseAction("PhaseFieldApp", PolycrystalVoronoiVoidICAction, "add_ic");
17 
20 {
23  params.addRequiredParam<std::string>("var_name_base", "specifies the base name of the variables");
24  params.suppressParameter<VariableName>("variable");
25  params.addRequiredParam<UserObjectName>(
26  "polycrystal_ic_uo", "UserObject for obtaining the polycrystal grain structure.");
27  params.addParam<FileName>(
28  "file_name",
29  "",
30  "File containing grain centroids, if file_name is provided, the centroids "
31  "from the file will be used.");
32  params.addParam<std::vector<SubdomainName>>(
33  "block", {}, "Block restriction for the initial condition");
34 
35  return params;
36 }
37 
39  : Action(params),
40  _op_num(getParam<unsigned int>("op_num")),
41  _var_name_base(getParam<std::string>("var_name_base")),
42  _file_name(getParam<FileName>("file_name"))
43 {
44 }
45 
46 void
48 {
49  // Loop through the number of order parameters
50  for (unsigned int op = 0; op < _op_num; op++)
51  {
52  // Set parameters for BoundingBoxIC
53  InputParameters poly_params = _factory.getValidParams("PolycrystalVoronoiVoidIC");
54  poly_params.applyParameters(parameters());
55  poly_params.set<unsigned int>("op_index") = op;
56  poly_params.set<VariableName>("variable") = _var_name_base + Moose::stringify(op);
57  poly_params.set<MooseEnum>("structure_type") = "grains";
58  poly_params.set<UserObjectName>("polycrystal_ic_uo") =
59  getParam<UserObjectName>("polycrystal_ic_uo");
60 
61  // Add initial condition
62  _problem->addInitialCondition(
63  "PolycrystalVoronoiVoidIC", name() + "_" + Moose::stringify(op), poly_params);
64  }
65 }
Sets up a polycrystal initial condition with voids on grain boundaries for all order parameters...
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
registerMooseAction("PhaseFieldApp", PolycrystalVoronoiVoidICAction, "add_ic")
InputParameters getValidParams(const std::string &name) const
void applyParameters(const InputParameters &common, const std::vector< std::string > &exclude={}, const bool allow_private=false)
PolycrystalVoronoiVoidICAction(const InputParameters &params)
virtual const std::string & name() const
void addRequiredParam(const std::string &name, const std::string &doc_string)
void suppressParameter(const std::string &name)
Factory & _factory
static InputParameters validParams()
std::string stringify(const T &t)
std::shared_ptr< FEProblemBase > & _problem
const InputParameters & parameters() const
static InputParameters actionParameters()
void ErrorVector unsigned int