www.mooseframework.org
PolycrystalVariablesAction.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 "AddVariableAction.h"
12 #include "Conversion.h"
13 #include "Factory.h"
14 #include "FEProblem.h"
15 #include "NonlinearSystemBase.h"
16 
17 #include "libmesh/string_to_enum.h"
18 
19 registerMooseAction("PhaseFieldApp", PolycrystalVariablesAction, "add_variable");
20 registerMooseAction("PhaseFieldApp", PolycrystalVariablesAction, "copy_nodal_vars");
21 registerMooseAction("PhaseFieldApp", PolycrystalVariablesAction, "check_copy_nodal_vars");
22 
23 template <>
24 InputParameters
26 {
27  InputParameters params = validParams<Action>();
28  params.addClassDescription("Set up order parameter variables for a polycrystal simulation");
29  // Get MooseEnums for the possible order/family options for this variable
30  MooseEnum families(AddVariableAction::getNonlinearVariableFamilies());
31  MooseEnum orders(AddVariableAction::getNonlinearVariableOrders());
32  params.addParam<MooseEnum>("family",
33  families,
34  "Specifies the family of FE "
35  "shape function to use for the order parameters");
36  params.addParam<MooseEnum>("order",
37  orders,
38  "Specifies the order of the FE "
39  "shape function to use for the order parameters");
40  params.addParam<bool>(
41  "initial_from_file",
42  false,
43  "Take the initial condition of all polycrystal variables from the mesh file");
44  params.addParam<Real>("scaling", 1.0, "Specifies a scaling factor to apply to this variable");
45  params.addRequiredParam<unsigned int>("op_num",
46  "specifies the number of order parameters to create");
47  params.addRequiredParam<std::string>("var_name_base", "specifies the base name of the variables");
48  return params;
49 }
50 
52  : Action(params),
53  _op_num(getParam<unsigned int>("op_num")),
54  _var_name_base(getParam<std::string>("var_name_base"))
55 {
56 }
57 
58 void
60 {
61  // take initial values from file?
62  bool initial_from_file = getParam<bool>("initial_from_file");
63 
64  // Loop through the number of order parameters
65  for (unsigned int op = 0; op < _op_num; op++)
66  {
67  // Create variable names
68  std::string var_name = _var_name_base + Moose::stringify(op);
69 
70  // Add the variable
71  if (_current_task == "add_variable")
72  {
73  auto fe_type = AddVariableAction::feType(_pars);
74  auto type = AddVariableAction::determineType(fe_type, 1);
75  auto var_params = _factory.getValidParams(type);
76 
77  var_params.applySpecificParameters(_pars, {"order", "family"});
78  var_params.set<std::vector<Real>>("scaling") = {_pars.get<Real>("scaling")};
79  _problem->addVariable(type, var_name, var_params);
80  }
81 
82  // Setup initial from file if requested
83  if (initial_from_file)
84  {
85  if (_current_task == "check_copy_nodal_vars")
86  _app.setFileRestart() = true;
87 
88  if (_current_task == "copy_nodal_vars")
89  {
90  auto * system = &_problem->getNonlinearSystemBase();
91  system->addVariableToCopy(var_name, var_name, "LATEST");
92  }
93  }
94  }
95 }
PolycrystalVariablesAction::_op_num
const unsigned int _op_num
Definition: PolycrystalVariablesAction.h:29
PolycrystalVariablesAction.h
PolycrystalVariablesAction::PolycrystalVariablesAction
PolycrystalVariablesAction(const InputParameters &params)
Definition: PolycrystalVariablesAction.C:51
PolycrystalVariablesAction::_var_name_base
const std::string _var_name_base
Definition: PolycrystalVariablesAction.h:30
validParams< PolycrystalVariablesAction >
InputParameters validParams< PolycrystalVariablesAction >()
Definition: PolycrystalVariablesAction.C:25
PolycrystalVariablesAction::act
virtual void act()
Definition: PolycrystalVariablesAction.C:59
registerMooseAction
registerMooseAction("PhaseFieldApp", PolycrystalVariablesAction, "add_variable")
PolycrystalVariablesAction
Automatically generates all variables to model a polycrystal with op_num orderparameters.
Definition: PolycrystalVariablesAction.h:21