https://mooseframework.inl.gov
Loading...
Searching...
No Matches
BicrystalCircleGrainICAction.C
Go to the documentation of this file.
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
11#include "Factory.h"
12#include "FEProblem.h"
13#include "Conversion.h"
14
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
53void
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}
registerMooseAction("PhaseFieldApp", BicrystalCircleGrainICAction, "add_ic")
void ErrorVector unsigned int
static InputParameters validParams()
std::shared_ptr< FEProblemBase > & _problem
Bicrystal with a circular grain and an embedding outer grain.
BicrystalCircleGrainICAction(const InputParameters &params)
InputParameters getValidParams(const std::string &name) const
void applySpecificParameters(const InputParameters &common, const std::vector< std::string > &include, bool allow_private=false)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
void paramError(const std::string &param, Args... args) const
const InputParameters & _pars
Factory & _factory
std::string stringify(const T &t)