LinearFVNormalVelocityFunctorDirichletBC

Description

LinearFVNormalVelocityFunctorDirichletBC specifies the normal velocity. This boundary condition is meant for the velocity variable(s) in the Navier-Stokes equations and is a good choice if you can assume the velocity is entirely parallel to the normal direction at the boundary. A positive value for the normal velocity denotes outflow; a negative value denotes inflow. We anticipate that this boundary condition will primarily be used on inflows since that is primarily where Dirichlet conditions for velocity are imposed.

Example Syntax

In this example a channel is rotated such that it would require some mental work from the user to predetermine the inlet velocity vector. It is much easier to instead prescribe the normal velocity directly and allow the boundary condition to partition the normal velocity among the normal components.

[LinearFVBCs<<<{"href": "../../syntax/LinearFVBCs/index.html"}>>>]
  [inlet-u]
    type = LinearFVNormalVelocityFunctorDirichletBC<<<{"description": "Adds a dirichlet BC for a velocity parallel to the normal direction. A positive dirichlet value would denote outflow, while negative denotes inflow.", "href": "LinearFVNormalVelocityFunctorDirichletBC.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'left'
    variable<<<{"description": "The name of the variable that this boundary condition applies to"}>>> = vel_x
    normal_velocity<<<{"description": "The velocity in the normal direction"}>>> = '-1'
    component<<<{"description": "The velocity component this object is acting on. We will multiply the prescribed normal velocity by the corresponding face normal component"}>>> = 'x'
  []
  [inlet-v]
    type = LinearFVNormalVelocityFunctorDirichletBC<<<{"description": "Adds a dirichlet BC for a velocity parallel to the normal direction. A positive dirichlet value would denote outflow, while negative denotes inflow.", "href": "LinearFVNormalVelocityFunctorDirichletBC.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'left'
    variable<<<{"description": "The name of the variable that this boundary condition applies to"}>>> = vel_y
    normal_velocity<<<{"description": "The velocity in the normal direction"}>>> = '-1'
    component<<<{"description": "The velocity component this object is acting on. We will multiply the prescribed normal velocity by the corresponding face normal component"}>>> = 'y'
  []
  [walls-u]
    type = LinearFVAdvectionDiffusionFunctorDirichletBC<<<{"description": "Adds a dirichlet BC which can be used for the assembly of linear finite volume system and whose face values are determined using a functor. This kernel is only designed to work with advection-diffusion problems.", "href": "LinearFVAdvectionDiffusionFunctorDirichletBC.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'top bottom'
    variable<<<{"description": "The name of the variable that this boundary condition applies to"}>>> = vel_x
    functor<<<{"description": "The functor for this boundary condition. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = 0.0
  []
  [walls-v]
    type = LinearFVAdvectionDiffusionFunctorDirichletBC<<<{"description": "Adds a dirichlet BC which can be used for the assembly of linear finite volume system and whose face values are determined using a functor. This kernel is only designed to work with advection-diffusion problems.", "href": "LinearFVAdvectionDiffusionFunctorDirichletBC.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'top bottom'
    variable<<<{"description": "The name of the variable that this boundary condition applies to"}>>> = vel_y
    functor<<<{"description": "The functor for this boundary condition. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = 0.0
  []
  [outlet_p]
    type = LinearFVAdvectionDiffusionFunctorDirichletBC<<<{"description": "Adds a dirichlet BC which can be used for the assembly of linear finite volume system and whose face values are determined using a functor. This kernel is only designed to work with advection-diffusion problems.", "href": "LinearFVAdvectionDiffusionFunctorDirichletBC.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'right'
    variable<<<{"description": "The name of the variable that this boundary condition applies to"}>>> = pressure
    functor<<<{"description": "The functor for this boundary condition. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = 0
  []
  [outlet_u]
    type = LinearFVAdvectionDiffusionOutflowBC<<<{"description": "Adds a boundary condition which represents a surface with outflowing material with a constant velocity. This kernel is only compatible with advection-diffusion problems.", "href": "LinearFVAdvectionDiffusionOutflowBC.html"}>>>
    variable<<<{"description": "The name of the variable that this boundary condition applies to"}>>> = vel_x
    use_two_term_expansion<<<{"description": "If an approximate linear expansion should be used to compute the face value."}>>> = false
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
  []
  [outlet_v]
    type = LinearFVAdvectionDiffusionOutflowBC<<<{"description": "Adds a boundary condition which represents a surface with outflowing material with a constant velocity. This kernel is only compatible with advection-diffusion problems.", "href": "LinearFVAdvectionDiffusionOutflowBC.html"}>>>
    variable<<<{"description": "The name of the variable that this boundary condition applies to"}>>> = vel_y
    use_two_term_expansion<<<{"description": "If an approximate linear expansion should be used to compute the face value."}>>> = false
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
  []
[]
(modules/navier_stokes/test/tests/finite_volume/ins/channel-flow/linear-segregated/2d/rotated-channel.i)

Input Parameters

  • boundaryThe list of boundary IDs from the mesh where this object applies

    C++ Type:std::vector<BoundaryName>

    Controllable:No

    Description:The list of boundary IDs from the mesh where this object applies

  • componentThe velocity component this object is acting on. We will multiply the prescribed normal velocity by the corresponding face normal component

    C++ Type:MooseEnum

    Options:x, y, z

    Controllable:No

    Description:The velocity component this object is acting on. We will multiply the prescribed normal velocity by the corresponding face normal component

  • normal_velocityThe velocity in the normal direction

    C++ Type:MooseFunctorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The velocity in the normal direction

  • variableThe name of the variable that this boundary condition applies to

    C++ Type:LinearVariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The name of the variable that this boundary condition applies to

Required Parameters

  • absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution

    C++ Type:std::vector<TagName>

    Controllable:No

    Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution

  • extra_matrix_tagsThe extra tags for the matrices this Kernel should fill

    C++ Type:std::vector<TagName>

    Controllable:No

    Description:The extra tags for the matrices this Kernel should fill

  • extra_vector_tagsThe extra tags for the vectors this Kernel should fill

    C++ Type:std::vector<TagName>

    Controllable:No

    Description:The extra tags for the vectors this Kernel should fill

  • matrix_onlyFalseWhether this object is only doing assembly to matrices (no vectors)

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether this object is only doing assembly to matrices (no vectors)

  • matrix_tagssystemThe tag for the matrices this Kernel should fill

    Default:system

    C++ Type:MultiMooseEnum

    Options:nontime, system

    Controllable:No

    Description:The tag for the matrices this Kernel should fill

  • vector_tagsrhsThe tag for the vectors this Kernel should fill

    Default:rhs

    C++ Type:MultiMooseEnum

    Options:rhs, time

    Controllable:No

    Description:The tag for the vectors this Kernel should fill

Contribution To Tagged Field Data Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Controllable:Yes

    Description:Set the enabled status of the MooseObject.

  • implicitTrueDetermines whether this object is calculated using an implicit or explicit form

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Determines whether this object is calculated using an implicit or explicit form

  • search_methodnearest_node_connected_sidesChoice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).

    Default:nearest_node_connected_sides

    C++ Type:MooseEnum

    Options:nearest_node_connected_sides, all_proximate_sides

    Controllable:No

    Description:Choice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).

Advanced Parameters

Input Files