www.mooseframework.org
MultiBarrierFunctionMaterial.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 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<Material>();
19  params.addClassDescription("Double well phase transformation barrier free energy contribution.");
20  params.addParam<std::string>("function_name", "g", "actual name for g(eta_i)");
21  MooseEnum h_order("SIMPLE=0", "SIMPLE");
22  params.addParam<MooseEnum>(
23  "g_order", h_order, "Polynomial order of the switching function h(eta)");
24  params.addParam<bool>("well_only",
25  false,
26  "Make the g zero in [0:1] so it only contributes to "
27  "enforcing the eta range and not to the phase "
28  "transformation barrier.");
29  params.addRequiredCoupledVar("etas", "eta_i order parameters, one for each h");
30  return params;
31 }
32 
34  : DerivativeMaterialInterface<Material>(parameters),
35  _function_name(getParam<std::string>("function_name")),
36  _g_order(getParam<MooseEnum>("g_order")),
37  _well_only(getParam<bool>("well_only")),
38  _num_eta(coupledComponents("etas")),
39  _eta(_num_eta),
40  _prop_g(declareProperty<Real>(_function_name)),
41  _prop_dg(_num_eta),
42  _prop_d2g(_num_eta)
43 {
44  // declare derivative properties, fetch eta values
45  for (unsigned int i = 0; i < _num_eta; ++i)
46  {
47  const VariableName & eta_name = getVar("etas", i)->name();
48  _prop_dg[i] = &declarePropertyDerivative<Real>(_function_name, eta_name);
49  _prop_d2g[i] = &declarePropertyDerivative<Real>(_function_name, eta_name, eta_name);
50  _eta[i] = &coupledValue("etas", i);
51  }
52 }
53 
54 void
56 {
57  Real g = 0.0;
58 
59  for (unsigned int i = 0; i < _num_eta; ++i)
60  {
61  const Real n = (*_eta[i])[_qp];
62 
63  if (_well_only && n >= 0.0 && n <= 1.0)
64  {
65  (*_prop_dg[i])[_qp] = 0.0;
66  (*_prop_d2g[i])[_qp] = 0.0;
67  continue;
68  }
69 
70  switch (_g_order)
71  {
72  case 0: // SIMPLE
73  g += n * n * (1.0 - n) * (1.0 - n);
74  (*_prop_dg[i])[_qp] = 2.0 * n * (n - 1.0) * (2.0 * n - 1.0);
75  (*_prop_d2g[i])[_qp] = 12.0 * (n * n - n) + 2.0;
76  break;
77  }
78  }
79 
80  _prop_g[_qp] = g;
81 }
MultiBarrierFunctionMaterial::_well_only
bool _well_only
zero out g contribution in the eta interval [0:1]
Definition: MultiBarrierFunctionMaterial.h:40
MultiBarrierFunctionMaterial.h
MultiBarrierFunctionMaterial::_prop_g
MaterialProperty< Real > & _prop_g
Barrier functions and their drivatives.
Definition: MultiBarrierFunctionMaterial.h:47
MultiBarrierFunctionMaterial::_prop_dg
std::vector< MaterialProperty< Real > * > _prop_dg
Definition: MultiBarrierFunctionMaterial.h:48
MultiBarrierFunctionMaterial::_num_eta
unsigned int _num_eta
order parameters
Definition: MultiBarrierFunctionMaterial.h:43
MultiBarrierFunctionMaterial::computeQpProperties
virtual void computeQpProperties()
Definition: MultiBarrierFunctionMaterial.C:55
MultiBarrierFunctionMaterial::MultiBarrierFunctionMaterial
MultiBarrierFunctionMaterial(const InputParameters &parameters)
Definition: MultiBarrierFunctionMaterial.C:33
registerMooseObject
registerMooseObject("PhaseFieldApp", MultiBarrierFunctionMaterial)
MultiBarrierFunctionMaterial::_prop_d2g
std::vector< MaterialProperty< Real > * > _prop_d2g
Definition: MultiBarrierFunctionMaterial.h:48
MultiBarrierFunctionMaterial::_g_order
MooseEnum _g_order
Polynomial order of the barrier function .
Definition: MultiBarrierFunctionMaterial.h:37
MultiBarrierFunctionMaterial::_eta
std::vector< const VariableValue * > _eta
Definition: MultiBarrierFunctionMaterial.h:44
MultiBarrierFunctionMaterial::_function_name
std::string _function_name
name of the function of eta (used to generate the material property names)
Definition: MultiBarrierFunctionMaterial.h:34
validParams< MultiBarrierFunctionMaterial >
InputParameters validParams< MultiBarrierFunctionMaterial >()
Definition: MultiBarrierFunctionMaterial.C:16
MultiBarrierFunctionMaterial
Double well phase transformation barrier free energy contribution.
Definition: MultiBarrierFunctionMaterial.h:25