InputParameters validParams<BarrierFunctionMaterial>()
{
  InputParameters params = validParams<OrderParameterFunctionMaterial>();
  params.addClassDescription("Helper material to provide g(eta) and its derivative in a polynomial.\nSIMPLE: eta^2*(1-eta)^2\nLOW: eta*(1-eta)");
  MooseEnum g_order("SIMPLE=0 LOW", "SIMPLE");
  params.addParam<MooseEnum>("g_order", g_order, "Polynomial order of the barrier function g(eta)");
  params.addParam<bool>("well_only", false, "Make the g zero in [0:1] so it only contributes to enforcing the eta range and not to the phase transformation berrier.");
  params.set<std::string>("function_name") = std::string("g");
  return params;
}
InputParameters
validParams<CrossTermBarrierFunctionBase>()
{
  InputParameters params = validParams<Material>();
  params.addParam<std::string>("function_name", "g", "actual name for g(eta_i)");
  MooseEnum g_order("SIMPLE=0 LOW", "SIMPLE");
  params.addParam<MooseEnum>("g_order", g_order, "Polynomial order of the barrier function g(eta)");
  params.addRequiredCoupledVar("etas", "eta_i order parameters, one for each h");
  params.addRequiredParam<std::vector<Real>>("W_ij",
                                             "Terms controlling barrier height set W=1 in "
                                             "DerivativeMultiPhaseMaterial for these to "
                                             "apply");
  return params;
}