www.mooseframework.org
HHPFCRFFSplitVariablesAction.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 #include "AddVariableAction.h"
15 
16 #include "libmesh/string_to_enum.h"
17 
18 registerMooseAction("PhaseFieldApp", HHPFCRFFSplitVariablesAction, "add_variable");
19 
20 template <>
21 InputParameters
23 {
24  InputParameters params = validParams<Action>();
25  MooseEnum familyEnum = AddVariableAction::getNonlinearVariableFamilies();
26  params.addParam<MooseEnum>(
27  "family",
28  familyEnum,
29  "Specifies the family of FE shape functions to use for the L variables");
30  MooseEnum orderEnum = AddVariableAction::getNonlinearVariableOrders();
31  params.addParam<MooseEnum>(
32  "order",
33  orderEnum,
34  "Specifies the order of the FE shape function to use for the L variables");
35  params.addParam<Real>("scaling", 1.0, "Specifies a scaling factor to apply to the L variables");
36  params.addRequiredParam<unsigned int>(
37  "num_L", "specifies the number of complex L variables will be solved for");
38  params.addRequiredParam<std::string>("L_name_base", "Base name for the complex L variables");
39 
40  return params;
41 }
42 
44  : Action(params),
45  _num_L(getParam<unsigned int>("num_L")),
46  _L_name_base(getParam<std::string>("L_name_base"))
47 {
48 }
49 
50 void
52 {
53 #ifdef DEBUG
54  Moose::err << "Inside the HHPFCRFFSplitVariablesAction Object\n";
55  Moose::err << "VariableBase: " << _L_name_base << "\torder: " << getParam<MooseEnum>("order")
56  << "\tfamily: " << getParam<MooseEnum>("family") << std::endl;
57 #endif
58 
59  // Loop through the number of L variables
60  for (unsigned int l = 0; l < _num_L; ++l)
61  {
62  // Create L base name
63  std::string L_name = _L_name_base + Moose::stringify(l);
64 
65  // Create real L variable
66  std::string real_name = L_name + "_real";
67 
68  _problem->addVariable(real_name,
69  FEType(Utility::string_to_enum<Order>(getParam<MooseEnum>("order")),
70  Utility::string_to_enum<FEFamily>(getParam<MooseEnum>("family"))),
71  getParam<Real>("scaling"));
72 
73  if (l > 0)
74  {
75  // Create imaginary L variable IF l > 0
76  std::string imag_name = L_name + "_imag";
77 
78  _problem->addVariable(
79  imag_name,
80  FEType(Utility::string_to_enum<Order>(getParam<MooseEnum>("order")),
81  Utility::string_to_enum<FEFamily>(getParam<MooseEnum>("family"))),
82  getParam<Real>("scaling"));
83  }
84  }
85 }
registerMooseAction
registerMooseAction("PhaseFieldApp", HHPFCRFFSplitVariablesAction, "add_variable")
HHPFCRFFSplitVariablesAction
Automatically generates all the L variables for the RFF phase field crystal model.
Definition: HHPFCRFFSplitVariablesAction.h:24
HHPFCRFFSplitVariablesAction::act
virtual void act()
Definition: HHPFCRFFSplitVariablesAction.C:51
HHPFCRFFSplitVariablesAction.h
HHPFCRFFSplitVariablesAction::_num_L
const unsigned int _num_L
Definition: HHPFCRFFSplitVariablesAction.h:32
validParams< HHPFCRFFSplitVariablesAction >
InputParameters validParams< HHPFCRFFSplitVariablesAction >()
Definition: HHPFCRFFSplitVariablesAction.C:22
HHPFCRFFSplitVariablesAction::HHPFCRFFSplitVariablesAction
HHPFCRFFSplitVariablesAction(const InputParameters &params)
Definition: HHPFCRFFSplitVariablesAction.C:43
HHPFCRFFSplitVariablesAction::_L_name_base
const std::string _L_name_base
Definition: HHPFCRFFSplitVariablesAction.h:33