www.mooseframework.org
PolycrystalKernelAction.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 "Conversion.h"
13 #include "FEProblem.h"
14 
15 registerMooseAction("PhaseFieldApp", PolycrystalKernelAction, "add_kernel");
16 
17 template <>
18 InputParameters
20 {
21  InputParameters params = validParams<Action>();
22  params.addClassDescription(
23  "Set up ACGrGrPoly, ACInterface, TimeDerivative, and ACGBPoly kernels");
24  params.addRequiredParam<unsigned int>(
25  "op_num", "specifies the total number of grains (deformed + recrystallized) to create");
26  params.addRequiredParam<std::string>("var_name_base", "specifies the base name of the variables");
27  params.addParam<VariableName>("c", "Name of coupled concentration variable");
28  params.addParam<Real>("en_ratio", 1.0, "Ratio of surface to GB energy");
29  params.addParam<unsigned int>("ndef", 0, "specifies the number of deformed grains to create");
30  params.addParam<bool>("implicit", true, "Whether kernels are implicit or not");
31  params.addParam<bool>(
32  "use_displaced_mesh", false, "Whether to use displaced mesh in the kernels");
33  params.addParam<bool>("variable_mobility",
34  true,
35  "The mobility is a function of any MOOSE variable (if "
36  "this is set to false, L must be constant over the "
37  "entire domain!)");
38  params.addParam<std::vector<VariableName>>("args", "Vector of variable arguments L depends on");
39  return params;
40 }
41 
42 PolycrystalKernelAction::PolycrystalKernelAction(const InputParameters & params)
43  : Action(params),
44  _op_num(getParam<unsigned int>("op_num")),
45  _var_name_base(getParam<std::string>("var_name_base"))
46 {
47 }
48 
49 void
51 {
52  for (unsigned int op = 0; op < _op_num; ++op)
53  {
54  //
55  // Create variable names
56  //
57 
58  std::string var_name = _var_name_base + Moose::stringify(op);
59  std::vector<VariableName> v;
60  v.resize(_op_num - 1);
61 
62  unsigned int ind = 0;
63  for (unsigned int j = 0; j < _op_num; ++j)
64  if (j != op)
65  v[ind++] = _var_name_base + Moose::stringify(j);
66 
67  //
68  // Set up ACGrGrPoly kernels
69  //
70 
71  {
72  InputParameters params = _factory.getValidParams("ACGrGrPoly");
73  params.set<NonlinearVariableName>("variable") = var_name;
74  params.set<std::vector<VariableName>>("v") = v;
75  params.applyParameters(parameters());
76 
77  std::string kernel_name = "ACBulk_" + var_name;
78  _problem->addKernel("ACGrGrPoly", kernel_name, params);
79  }
80 
81  //
82  // Set up ACInterface kernels
83  //
84 
85  {
86  InputParameters params = _factory.getValidParams("ACInterface");
87  params.set<NonlinearVariableName>("variable") = var_name;
88  params.applyParameters(parameters());
89 
90  std::string kernel_name = "ACInt_" + var_name;
91  _problem->addKernel("ACInterface", kernel_name, params);
92  }
93 
94  //
95  // Set up TimeDerivative kernels
96  //
97 
98  {
99  InputParameters params = _factory.getValidParams("TimeDerivative");
100  params.set<NonlinearVariableName>("variable") = var_name;
101  params.set<bool>("implicit") = true;
102  params.applyParameters(parameters());
103 
104  std::string kernel_name = "IE_" + var_name;
105  _problem->addKernel("TimeDerivative", kernel_name, params);
106  }
107 
108  //
109  // Set up optional ACGBPoly bubble interaction kernels
110  //
111 
112  if (isParamValid("c"))
113  {
114  InputParameters params = _factory.getValidParams("ACGBPoly");
115  params.set<NonlinearVariableName>("variable") = var_name;
116  params.set<std::vector<VariableName>>("c") = {getParam<VariableName>("c")};
117  params.applyParameters(parameters());
118 
119  std::string kernel_name = "ACBubInteraction_" + var_name;
120  _problem->addKernel("ACGBPoly", kernel_name, params);
121  }
122  }
123 }
registerMooseAction
registerMooseAction("PhaseFieldApp", PolycrystalKernelAction, "add_kernel")
PolycrystalKernelAction.h
PolycrystalKernelAction::act
virtual void act()
Definition: PolycrystalKernelAction.C:50
PolycrystalKernelAction::_var_name_base
const std::string _var_name_base
base name for the order parameter variables
Definition: PolycrystalKernelAction.h:30
PolycrystalKernelAction
Action that sets up ACGrGrPoly, ACInterface, TimeDerivative, and ACGBPoly kernels.
Definition: PolycrystalKernelAction.h:18
PolycrystalKernelAction::PolycrystalKernelAction
PolycrystalKernelAction(const InputParameters &params)
Definition: PolycrystalKernelAction.C:42
validParams< PolycrystalKernelAction >
InputParameters validParams< PolycrystalKernelAction >()
Definition: PolycrystalKernelAction.C:19
PolycrystalKernelAction::_op_num
const unsigned int _op_num
number of grains to create
Definition: PolycrystalKernelAction.h:27