forked from idaholab/moose
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AddAuxVariableAction.C
87 lines (72 loc) · 2.78 KB
/
AddAuxVariableAction.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//* This file is part of the MOOSE framework
//* https://www.mooseframework.org
//*
//* All rights reserved, see COPYRIGHT for full restrictions
//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
//*
//* Licensed under LGPL 2.1, please see LICENSE for details
//* https://www.gnu.org/licenses/lgpl-2.1.html
#include "AddAuxVariableAction.h"
#include "FEProblem.h"
registerMooseAction("MooseApp", AddAuxVariableAction, "add_aux_variable");
template <>
InputParameters
validParams<AddAuxVariableAction>()
{
MooseEnum families(AddAuxVariableAction::getAuxVariableFamilies());
MooseEnum orders(AddAuxVariableAction::getAuxVariableOrders());
InputParameters params = validParams<Action>();
params += validParams<OutputInterface>();
params.addParam<MooseEnum>(
"family", families, "Specifies the family of FE shape functions to use for this variable");
params.addParam<MooseEnum>("order",
orders,
"Specifies the order of the FE shape function to use "
"for this variable (additional orders not listed are "
"allowed)");
params.addParam<unsigned int>("component", 1, "Number of component for an array variable");
params.addParam<std::vector<Real>>("initial_condition",
"Specifies the initial condition for this variable");
params.addParam<std::vector<SubdomainName>>("block", "The block id where this variable lives");
return params;
}
AddAuxVariableAction::AddAuxVariableAction(InputParameters params) : AddVariableAction(params) {}
MooseEnum
AddAuxVariableAction::getAuxVariableFamilies()
{
return MooseEnum("LAGRANGE MONOMIAL SCALAR LAGRANGE_VEC", "LAGRANGE", true);
}
MooseEnum
AddAuxVariableAction::getAuxVariableOrders()
{
return MooseEnum(
"CONSTANT FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH NINTH", "FIRST", true);
}
void
AddAuxVariableAction::act()
{
// Name of variable being added
std::string var_name = name();
// Blocks from the input
std::set<SubdomainID> blocks = getSubdomainIDs();
// Scalar variable
if (_scalar_var)
_problem->addAuxScalarVariable(var_name, _fe_type.order);
// Non-scalar variable
else
{
// Check that the order is valid (CONSTANT, FIRST, or SECOND)
if (_fe_type.order > 9)
mooseError("Non-scalar AuxVariables must be CONSTANT, FIRST, SECOND, THIRD, FOURTH, FIFTH, "
"SIXTH, SEVENTH, EIGHTH or NINTH order (",
_fe_type.order,
" supplied)");
if (blocks.empty())
_problem->addAuxVariable(var_name, _fe_type);
else
_problem->addAuxVariable(var_name, _fe_type, &blocks);
}
// Create the initial condition
if (isParamValid("initial_condition"))
createInitialConditionAction();
}