Functions System


  • Function objects allow you to evaluate analytic expressions based on the spactial location and time .

  • You can create a custom Function object by inheriting from Function and overriding the virtual value() (and optionally gradient()) functions.

  • Functions can be accessed in MOOSE objects (BCs, ICs, Materials, etc.) by calling getFunction("name"), where "name" matches a name from the input file.

  • MOOSE has several built-in Functions such as:

    • FunctionDirichletBC

    • FunctionNeumannBC

    • FunctionIC

    • UserForcingFunction

  • Each of these types has a "function" parameter which is set in the input file, and controls which Function object is used.

  • ParsedFunction objects are defined by strings directly in the input file, e.g.:

    • value = 'x*x+sin(y*t)'

Default Functions

  • Whenever a Function object is added via addParam(), a default can be provided.

  • Both constant values and parsed function strings can be used as default.

   // Adding a Function with a default constant
   params.addParam<FunctionName>("pressure_grad", "0.5", "doc");

   // Adding a Function with a default parsed function
   params.addParam<FunctionName>("power_history", "t+100*sin(y)", "doc");
  • A ParsedFunction or ConstantFunction object is automatically constructed based on the default value if a function name is not supplied in the input file.

Input File Syntax

  • Functions are declared in the Function block.

  • ParsedFunction allows you to provide a string specifying the function.

  • You can use constants (like alpha), and define their value.

  • Common expressions like sin() and pi are supported.

  • After you have declared a Function, you can use them in objects like FunctionDirichletBC.

  active = 'bc_func'
    type = ParsedFunction
    value = 'sin(alpha*pi*x)'
    vars = 'alpha'
    vals = '16'
  active = 'all'
    type = FunctionDirichletBC
    variable = u 
    boundary = '1 2'
    function = bc_func

Example 13: Custom Functions

In Example 13, two functions are created:

  • A ParsedFunction that will be used to define a Dirichlet boundary condition

  • A custom C++ Function object that defines a forcing function for the diffusion equation.

Look at Example 13

Further Function Documentation

  • Moose App
  • Axisymmetric2D3DSolutionFunctionFunction for reading a 2D axisymmetric solution from file and mapping it to a 3D Cartesian model
  • BicubicSplineFunction
  • CompositeFunctionMultiplies an arbitrary set of functions together
  • ConstantFunction
  • ImageFunctionFunction with values sampled from a given image stack
  • LinearCombinationFunctionReturns the linear combination of the functions
  • ParsedFunction
  • ParsedGradFunction
  • ParsedVectorFunction
  • PiecewiseBilinearInterpolates values from a csv file
  • PiecewiseConstantDefines data using a set of x-y data pairs
  • PiecewiseLinearLinearly interpolates between pairs of x-y data
  • PiecewiseMulticonstantPiecewiseMulticonstant performs constant interpolation on 1D, 2D, 3D or 4D data. The data_file specifies the axes directions and the function values. If a point lies outside the data range, the appropriate end value is used.
  • PiecewiseMultilinearPiecewiseMultilinear performs linear interpolation on 1D, 2D, 3D or 4D data. The data_file specifies the axes directions and the function values. If a point lies outside the data range, the appropriate end value is used.
  • SolutionFunction
  • SplineFunction
  • TestSetupPostprocessorDataActionFunction
  • VectorPostprocessorFunction
  • Functional Expansion Tools App
  • FunctionSeriesThis function uses a convolution of functional series (functional expansion or FX) to create a 1D, 2D, or 3D function
  • Navier Stokes App
  • WedgeFunctionFunction which computes the exact solution for Jeffery-Hamel flow in a wedge.
  • Level Set App
  • LevelSetOlssonBubbleImplementation of 'bubble' ranging from 0 to 1.
  • LevelSetOlssonVortexA function for creating vortex velocity fields for level set equation benchmark problems.
  • Porous Flow App
  • MovingPlanarFrontThis function defines the position of a moving front. The front is an infinite plane with normal pointing from start_posn to end_posn. The front's distance from start_posn is defined by 'distance', so if the 'distance' function is time dependent, the front's position will change with time. Roughly speaking, the function returns true_value for points lying in between start_posn and start_posn + distance. Precisely speaking, two planes are constructed, both with normal pointing from start_posn to end_posn. The first plane passes through start_posn; the second plane passes through end_posn. Given a point p and time t, this function returns false_value if ANY of the following are true: (a) t=deactivation_time; (c) p is 'behind' start_posn (ie, p lies on one side of the start_posn plane and end_posn lies on the other side); (d) p is 'ahead' of the front (ie, p lies one one side of the front and start_posn lies on the other side); (e) the distance between p and the front is greater than active_length. Otherwise, the point is 'in the active zone' and the function returns true_value.