www.mooseframework.org
BicrystalCircleGrainICAction.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 
11 #include "Factory.h"
12 #include "FEProblem.h"
13 #include "Conversion.h"
14 
15 registerMooseAction("PhaseFieldApp", BicrystalCircleGrainICAction, "add_ic");
16 
19 {
21  params.addClassDescription("Bicrystal with a circular grain and an embedding outer grain");
22  params.addRequiredParam<std::string>("var_name_base", "specifies the base name of the variables");
23  params.addRequiredParam<unsigned int>("op_num", "Number of grains, should be 2");
24  params.addRequiredParam<Real>("radius", "Void radius");
25  params.addRequiredParam<Real>("x", "The x coordinate of the circle grain center");
26  params.addRequiredParam<Real>("y", "The y coordinate of the circle grain center");
27  params.addParam<Real>("z", 0.0, "The z coordinate of the circle grain center");
28  params.addParam<Real>(
29  "int_width", 0.0, "The interfacial width of the void surface. Defaults to sharp interface");
30  params.addParam<bool>(
31  "3D_sphere", true, "in 3D, whether the smaller grain is a spheres or columnar grain");
32  params.addParam<std::vector<SubdomainName>>("block",
33  "Block restriction for the initial condition");
34 
35  return params;
36 }
37 
39  : Action(params),
40  _var_name_base(getParam<std::string>("var_name_base")),
41  _op_num(getParam<unsigned int>("op_num")),
42  _radius(getParam<Real>("radius")),
43  _x(getParam<Real>("x")),
44  _y(getParam<Real>("y")),
45  _z(getParam<Real>("z")),
46  _int_width(getParam<Real>("int_width")),
47  _3D_sphere(getParam<bool>("3D_sphere"))
48 {
49  if (_op_num != 2)
50  paramError("op_num", "op_num must equal 2 for bicrystal ICs");
51 }
52 
53 void
55 {
56  // Loop through the number of order parameters
57  for (unsigned int op = 0; op < _op_num; op++)
58  {
59  // Create variable names
60  std::string var_name = _var_name_base + Moose::stringify(op);
61 
62  // Set parameters for SmoothCircleIC
63  InputParameters poly_params = _factory.getValidParams("SmoothCircleIC");
64  poly_params.set<VariableName>("variable") = var_name;
65  poly_params.set<Real>("x1") = _x;
66  poly_params.set<Real>("y1") = _y;
67  poly_params.set<Real>("z1") = _z;
68  poly_params.set<Real>("radius") = _radius;
69  poly_params.set<Real>("int_width") = _int_width;
70  poly_params.set<bool>("3D_spheres") = _3D_sphere;
71  if (op == 0)
72  {
73  // Values for circle grain
74  poly_params.set<Real>("invalue") = 1.0;
75  poly_params.set<Real>("outvalue") = 0.0;
76  }
77  else
78  {
79  // Values for matrix grain
80  poly_params.set<Real>("invalue") = 0.0;
81  poly_params.set<Real>("outvalue") = 1.0;
82  }
83  poly_params.applySpecificParameters(_pars, {"block"});
84 
85  // Add initial condition
86  _problem->addInitialCondition(
87  "SmoothCircleIC", "BicrystalCircleGrainIC_" + Moose::stringify(op), poly_params);
88  }
89 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void applySpecificParameters(const InputParameters &common, const std::vector< std::string > &include, bool allow_private=false)
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
registerMooseAction("PhaseFieldApp", BicrystalCircleGrainICAction, "add_ic")
void addRequiredParam(const std::string &name, const std::string &doc_string)
Factory & _factory
static InputParameters validParams()
void paramError(const std::string &param, Args... args) const
std::string stringify(const T &t)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const InputParameters & _pars
void addClassDescription(const std::string &doc_string)
std::shared_ptr< FEProblemBase > & _problem
BicrystalCircleGrainICAction(const InputParameters &params)
Bicrystal with a circular grain and an embedding outer grain.
void ErrorVector unsigned int