PorousRhieChowMassFlux

Rhie-Chow mass flux object specialized for porous flow/baffle cases.

Overview

PorousRhieChowMassFlux extends RhieChowMassFlux for porous-medium and porous-baffle calculations in the linear finite volume SIMPLE workflow.

Compared with the base object, it adds:

  • cell-porosity scaling of the pressure-coupling fields,

  • porous-baffle pressure jumps stored and relaxed on coupled interface faces,

  • compatibility with FVPressureJumpGreenGaussGradient, which reconstructs the pressure separately on each side of every baffle, and

  • a pressure-velocity coupling gradient that remains separate from the solution gradient used by the baffle diffusion correction.

Pressure jumps are supplied by the models listed in "pressure_jump_models", such as BernoulliFormLossPressureJump. The jump is updated from the current face mass flux and under-relaxed with "pressure_jump_relaxation". See Porous Media Weakly Compressible Linear Finite Volume for the discrete coupling.

Before each pressure corrector, the object updates the jump from the preceding corrected face flux. With PIMPLE, this happens before each of the pressure correctors of an outer iteration, so the effective relaxation grows with "num_piso_iterations". Without a reconstructed pressure gradient, the face flux is only recomputed after the last corrector, so a relaxation factor acts per outer iteration as . The pressure variable's FVPressureJumpGreenGaussGradient then removes that jump when interpolating pressure across each baffle. A zero jump recovers the standard Green-Gauss face value exactly.

The tangential superficial velocity also jumps across a baffle wherever porosity does. Density and viscosity must vary continuously. Every velocity variable must therefore use FVVelocityJumpGreenGaussGradient as its default gradient method. On baffle faces the flux of each side is weighted with the same half-cell conductances as the pressure (see LinearFVPressureCorrectionDiffusionJump), so neither the velocity jump nor a body force balanced by the pressure on each side is read as a mass-flux error.

This is the user object expected by LinearPWCNSFVMomentumFlux, LinearFVPressureCorrectionDiffusionJump, and porous uses of LinearFVEnergyAdvection.

In this example, PorousRhieChowMassFlux uses a separately configured pressure-jump model on two porous interfaces.

[UserObjects<<<{"href": "../../syntax/UserObjects/index.html"}>>>]
  [pressure_jump]
    type = BernoulliFormLossPressureJump<<<{"description": "Provides Bernoulli and form-loss pressure jumps to PorousRhieChowMassFlux.", "href": "BernoulliFormLossPressureJump.html"}>>>
    boundary<<<{"description": "The boundaries on which this pressure jump model applies."}>>> = 'baffle baffle2'
    porosity<<<{"description": "The porosity functor. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = porosity
    density<<<{"description": "The density functor. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = ${rho}
  []
  [rc]
    type = PorousRhieChowMassFlux<<<{"description": "Rhie-Chow mass flux object specialized for porous flow/baffle cases.", "href": "PorousRhieChowMassFlux.html"}>>>
    u<<<{"description": "The x-component of velocity"}>>> = superficial_u
    pressure<<<{"description": "The pressure variable."}>>> = pressure
    rho<<<{"description": "Density functor. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = ${rho}
    porosity<<<{"description": "Porosity functor (defaults to 1 for non-porous calculations). A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = porosity
    p_diffusion_kernel<<<{"description": "The LinearFVPressureCorrectionDiffusion kernel acting on the pressure."}>>> = p_diffusion
    pressure_jump_models<<<{"description": "Pressure jump models applied by this object."}>>> = pressure_jump
    pressure_jump_relaxation<<<{"description": "Under-relaxation factor for pressure jump updates."}>>> = 0.1
  []
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/linear-segregated/1d-simple-channel/porous-baffle-1d.i)

Input Parameters

  • p_diffusion_kernelThe LinearFVPressureCorrectionDiffusion kernel acting on the pressure.

    C++ Type:std::string

    Controllable:No

    Description:The LinearFVPressureCorrectionDiffusion kernel acting on the pressure.

  • pressureThe pressure variable.

    C++ Type:VariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The pressure variable.

  • rhoDensity functor. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

    C++ Type:MooseFunctorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Density functor. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

  • uThe x-component of velocity

    C++ Type:VariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The x-component of velocity

Required Parameters

  • blockThe list of blocks (ids or names) that this object will be applied

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

    Controllable:No

    Description:The list of blocks (ids or names) that this object will be applied

  • porosity1Porosity functor (defaults to 1 for non-porous calculations). A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

    Default:1

    C++ Type:MooseFunctorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Porosity functor (defaults to 1 for non-porous calculations). A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

  • pressure_diffusion_interpolationaverageThe face interpolation method for Ainv in the pressure correction diffusion term.

    Default:average

    C++ Type:MooseEnum

    Options:average, harmonic

    Controllable:No

    Description:The face interpolation method for Ainv in the pressure correction diffusion term.

  • pressure_jump_modelsPressure jump models applied by this object.

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

    Controllable:No

    Description:Pressure jump models applied by this object.

  • pressure_jump_relaxation1Under-relaxation factor for pressure jump updates.

    Default:1

    C++ Type:Real

    Unit:(no unit assumed)

    Range:0.0

    Controllable:No

    Description:Under-relaxation factor for pressure jump updates.

  • pressure_projection_methodstandardThe method to use in the pressure projection for Ainv - standard (SIMPLE) or consistent (SIMPLEC)

    Default:standard

    C++ Type:MooseEnum

    Options:standard, consistent

    Controllable:No

    Description:The method to use in the pressure projection for Ainv - standard (SIMPLE) or consistent (SIMPLEC)

  • vThe y-component of velocity

    C++ Type:VariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The y-component of velocity

  • wThe z-component of velocity

    C++ Type:VariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The z-component of velocity

Optional Parameters

  • allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).

    Default:False

    C++ Type:bool

    Controllable:No

    Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).

  • execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.

    Default:0

    C++ Type:int

    Controllable:No

    Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.

  • force_postauxFalseForces the UserObject to be executed in POSTAUX

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in POSTAUX

  • force_preauxFalseForces the UserObject to be executed in PREAUX

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in PREAUX

  • force_preicFalseForces the UserObject to be executed in PREIC during initial setup

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in PREIC during initial setup

Execution Scheduling 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.

  • 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

    Controllable:No

    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.

Advanced Parameters

  • prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

  • use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

Material Property Retrieval Parameters

Input Files