std::shared_ptr<NeumannBCAbstract>
  ParsedFunctionNeumannBCFactoryHelper<FunctionType>::build_neumman_func_common( const GetPot& input,
                                                                                 MultiphysicsSystem& system,
                                                                                 const FEVariablesBase& fe_var,
                                                                                 const std::string& flux_input )
  {
    const std::vector<std::string>& var_names = fe_var.active_var_names();

    std::shared_ptr<NeumannBCAbstract> func;

    // Use "standard" parsed version if there's only one variable
    if( var_names.size() == 1 )
      {
        libmesh_assert_equal_to( fe_var.var_indices().size(), 1 );
        std::string expression = input(flux_input,std::string("DIE!"));
        func = this->build_parsed_neumann_func(system,expression,fe_var.var_indices()[0]);
      }
    // Otherwise, use the composite versions
    else
      {
        libmesh_assert_equal_to( fe_var.var_indices().size(), var_names.size() );

        // We already checked size consistency for flux input and var_names
        // so just use var_names for the size
        std::vector<std::string> expressions(var_names.size());

        for( unsigned int i = 0; i < var_names.size(); i++ )
          expressions[i] = input(flux_input,std::string("DIE!"),i);

        func = this->build_composite_parsed_neumann_func(system,expressions,fe_var.var_indices());
      }

    return func;
  }
 void CatalyticWallNeumannBCFactoryCommon<ImpType>::extract_species_vars
 ( const FEVariablesBase& fe_var, std::vector<VariableIndex>& species_vars ) const
 {
   species_vars = fe_var.var_indices();
 }