- cutoffCutoff of the cubic (measured in Pa (or K for temperature BCs)). This needs to be less than zero.
C++ Type:FunctionName

Description:Cutoff of the cubic (measured in Pa (or K for temperature BCs)). This needs to be less than zero.

- centerCenter of the cubic flux multiplier (measured in Pa (or K for temperature BCs)).
C++ Type:double

Description:Center of the cubic flux multiplier (measured in Pa (or K for temperature BCs)).

- maxMaximum of the cubic flux multiplier. Denote x = porepressure - center (or in the case of a heat flux with no fluid, x = temperature - center). Then Flux out is multiplied by (max/cutoff^3)*(2x + cutoff)(x - cutoff)^2 for cutoff < x < 0. Flux out is multiplied by max for x >= 0. Flux out is multiplied by 0 for x <= cutoff.
C++ Type:double

Description:Maximum of the cubic flux multiplier. Denote x = porepressure - center (or in the case of a heat flux with no fluid, x = temperature - center). Then Flux out is multiplied by (max/cutoff^3)*(2x + cutoff)(x - cutoff)^2 for cutoff < x < 0. Flux out is multiplied by max for x >= 0. Flux out is multiplied by 0 for x <= cutoff.

- PorousFlowDictatorThe UserObject that holds the list of PorousFlow variable names
C++ Type:UserObjectName

Description:The UserObject that holds the list of PorousFlow variable names

- variableThe name of the variable that this boundary condition applies to
C++ Type:NonlinearVariableName

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

- boundaryThe list of boundary IDs from the mesh where this boundary condition applies
C++ Type:std::vector

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

# PorousFlowHalfCubicSink

Applies a flux sink to a boundary. The base flux defined by PorousFlowSink is multiplied by a cubic.

The basic sink is scaled by a cubic flux multiplier of the pressure of a fluid phase *or* the temperature : where Here the units of are kg.m.s (for fluids) or J.m.s (for heat). The parameters , and are given in the input file using the `max`

, `center`

and `cutoff`

options, respectively.

If then the boundary condition will act as a sink, while if the boundary condition acts as a source. If applied to a fluid-component equation, the function has units kg.m.s. If applied to the heat equation, the function has units J.m.s. These units are potentially modified if the extra building blocks enumerated below are used.

In addition, the sink may be multiplied by any or all of the following quantities through the `optional parameters`

list.

Fluid relative permeability

Fluid mobility (, where is the normal vector to the boundary)

Fluid mass fraction

Fluid internal energy

Thermal conductivity

See boundary conditions for many more details and discussion.

## Input Parameters

- fluid_phaseIf supplied, then this BC will potentially be a function of fluid pressure, and you can use mass_fraction_component, use_mobility, use_relperm, use_enthalpy and use_energy. If not supplied, then this BC can only be a function of temperature
C++ Type:unsigned int

Description:If supplied, then this BC will potentially be a function of fluid pressure, and you can use mass_fraction_component, use_mobility, use_relperm, use_enthalpy and use_energy. If not supplied, then this BC can only be a function of temperature

- flux_function1The flux. The flux is OUT of the medium: hence positive values of this function means this BC will act as a SINK, while negative values indicate this flux will be a SOURCE. The functional form is useful for spatially or temporally varying sinks. Without any use_*, this function is measured in kg.m^-2.s^-1 (or J.m^-2.s^-1 for the case with only heat and no fluids)
Default:1

C++ Type:FunctionName

Description:The flux. The flux is OUT of the medium: hence positive values of this function means this BC will act as a SINK, while negative values indicate this flux will be a SOURCE. The functional form is useful for spatially or temporally varying sinks. Without any use_*, this function is measured in kg.m^-2.s^-1 (or J.m^-2.s^-1 for the case with only heat and no fluids)

- use_mobilityFalseIf true, then fluxes are multiplied by (density*permeability_nn/viscosity), where the '_nn' indicates the component normal to the boundary. In this case bare_flux is measured in Pa.m^-1. This can be used in conjunction with other use_*
Default:False

C++ Type:bool

Description:If true, then fluxes are multiplied by (density*permeability_nn/viscosity), where the '_nn' indicates the component normal to the boundary. In this case bare_flux is measured in Pa.m^-1. This can be used in conjunction with other use_*

- PT_shiftWhenever the sink is an explicit function of porepressure (such as a PiecewiseLinear function) the argument of the function is set to P - PT_shift instead of simply P. Similarly for temperature. PT_shift does not enter into any use_* calculations.
C++ Type:std::vector

Description:Whenever the sink is an explicit function of porepressure (such as a PiecewiseLinear function) the argument of the function is set to P - PT_shift instead of simply P. Similarly for temperature. PT_shift does not enter into any use_* calculations.

- mass_fraction_componentThe index corresponding to a fluid component. If supplied, the flux will be multiplied by the nodal mass fraction for the component
C++ Type:unsigned int

Description:The index corresponding to a fluid component. If supplied, the flux will be multiplied by the nodal mass fraction for the component

- use_thermal_conductivityFalseIf true, then fluxes are multiplied by thermal conductivity projected onto the normal direction. This can be used in conjunction with other use_*
Default:False

C++ Type:bool

Description:If true, then fluxes are multiplied by thermal conductivity projected onto the normal direction. This can be used in conjunction with other use_*

- use_internal_energyFalseIf true, then fluxes are multiplied by fluid internal energy. In this case bare_flux is measured in kg.m^-2.s^-1 / (J.kg). This can be used in conjunction with other use_*
Default:False

C++ Type:bool

Description:If true, then fluxes are multiplied by fluid internal energy. In this case bare_flux is measured in kg.m^-2.s^-1 / (J.kg). This can be used in conjunction with other use_*

- use_relpermFalseIf true, then fluxes are multiplied by relative permeability. This can be used in conjunction with other use_*
Default:False

C++ Type:bool

Description:If true, then fluxes are multiplied by relative permeability. This can be used in conjunction with other use_*

- displacementsThe displacements
C++ Type:std::vector

Description:The displacements

- use_enthalpyFalseIf true, then fluxes are multiplied by enthalpy. In this case bare_flux is measured in kg.m^-2.s^-1 / (J.kg). This can be used in conjunction with other use_*
Default:False

C++ Type:bool

Description:If true, then fluxes are multiplied by enthalpy. In this case bare_flux is measured in kg.m^-2.s^-1 / (J.kg). This can be used in conjunction with other use_*

### Optional Parameters

- enableTrueSet the enabled status of the MooseObject.
Default:True

C++ Type:bool

Description:Set the enabled status of the MooseObject.

- save_inThe name of auxiliary variables to save this BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector

Description:The name of auxiliary variables to save this BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)

- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False

C++ Type:bool

Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector

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

- seed0The seed for the master random number generator
Default:0

C++ Type:unsigned int

Description:The seed for the master random number generator

- diag_save_inThe name of auxiliary variables to save this BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector

Description:The name of auxiliary variables to save this BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)

- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True

C++ Type:bool

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

### Advanced Parameters

- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime

C++ Type:MultiMooseEnum

Description:The tag for the vectors this Kernel should fill

- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector

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

- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system

C++ Type:MultiMooseEnum

Description:The tag for the matrices this Kernel should fill

- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector

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

### Tagging Parameters

## Input Files

- modules/porous_flow/test/tests/sinks/s06.i
- modules/porous_flow/test/tests/jacobian/hcs01.i
- modules/porous_flow/test/tests/jacobian/hcs02.i