PorousFlowFullySaturatedMassTimeDerivative

Fully-saturated version of the single-component, single-phase fluid mass derivative wrt time

Consider a fully-saturated, single-phase, single-component fluid in a THM simulation. The time-derivative terms from the fluid governing equation are where and all other nomenclature is described here. Using the THM evolution of porosity, along with the assumption that the fluid bulk modulus, , and its volumetric thermal expansion coefficient, , are constant, and the fluid density is given by the time derivative terms may be written as (1) Here is the so-called Biot Modulus: (2) and is an effective volumetric thermal expansion coefficient: (3) Notice that disregarding the premultiplication by , the above time-derivative terms in Eq. (1) would be linear in the variables , displacement, and , if and were constant.

In standard poro-mechanics it is usual to calculate and at the initial stage of simulation, and keep them fixed forever afterwards. Of course this is an approximation since and were derived using the explicit assumption of a porosity that depended on , , and , but it makes finding analytical solutions much easier. Therefore, PorousFlow offers the following Materials and Kernels. Using these Materials and Kernel allows immediate and precise comparison with analytical and numerical solutions of poro-mechanics.

  1. PorousFlowConstantBiotModulus Material, which computes given by Eq. (2) during the initial stage of simulation, and keeps it fixed thereafter. It requires a Porosity Material, but that Material's Property is only used during the initial computation.

  2. PorousFlowConstantThermalExpansionCoefficient Material, which computes given by Eq. (3) during the the initial stage of simulation, and keeps it fixed thereafter. It requires a Porosity Material, but that Material's Property is only used during the initial computation.

  3. The PorousFlowFullySaturatedMassTimeDerivative Kernel, which computes one of the following contributions, depending upon the coupling_type flag:

  • for fluid-flow-only problems;

  • for TH problems;

  • for HM problems;

  • for THM problems.

The PorousFlowFullySaturatedMassTimeDerivative Kernel does not employ lumping, which is largely unnecessary in this single-phase, single-component situation. This means only quad-point'' Materials are needed. In fact, when using all the FullySaturated flow Kernels (see governing equations) standard Materials evaluated at the quadpoints are needed, which saves on computation time and input-file length.

In each case, the initial pre-multiplication by is optional (indicated by the parentheses around ).

When the Kernel is pre-multiplied by , which is the default, it is computing the time derivative of fluid mass. This allows the Kernel to be easily used with the remainder of PorousFlow: the BCs, the Postprocessors, the AuxKernels, and the DiracKernels are all based on mass.

When the pre-multiplication is not performed, this Kernel is computing the time derivative of fluid volume. This has two great advantages:

  • the time-derivatives are linearised, resulting in excellent nonlinear convergence;

  • comparing with results from poro-mechanics theory is straightforward.

However, this means additional care must be taken.

  • The flow Kernel PorousFlowFullySaturatedDarcyBase should also not pre-multiply by density.

  • The BCs, Postprocessors, AuxKernels, and DiracKernels must be written in such a way to operate in the fluid-volume scenario rather than the default fluid-mass scenario.

  • The flag consistent_with_displaced_mesh should be set false in the PorousFlowVolumetricStrain Material.

Input Parameters

  • PorousFlowDictatorThe UserObject that holds the list of PorousFlow variable names.

    C++ Type:UserObjectName

    Controllable:No

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

  • variableThe name of the variable that this residual object operates on

    C++ Type:NonlinearVariableName

    Controllable:No

    Description:The name of the variable that this residual object operates on

Required Parameters

  • biot_coefficient1Biot coefficient

    Default:1

    C++ Type:double

    Controllable:No

    Description:Biot coefficient

  • 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

  • coupling_typeHydroThe type of simulation. For simulations involving Mechanical deformations, you will need to supply the correct Biot coefficient. For simulations involving Thermal flows, you will need an associated ConstantThermalExpansionCoefficient Material

    Default:Hydro

    C++ Type:MooseEnum

    Options:Hydro, ThermoHydro, HydroMechanical, ThermoHydroMechanical

    Controllable:No

    Description:The type of simulation. For simulations involving Mechanical deformations, you will need to supply the correct Biot coefficient. For simulations involving Thermal flows, you will need an associated ConstantThermalExpansionCoefficient Material

  • displacementsThe displacements

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

    Controllable:No

    Description:The displacements

  • multiply_by_densityTrueIf true, then this Kernel is the time derivative of the fluid mass. If false, then this Kernel is the derivative of the fluid volume (which is common in poro-mechanics)

    Default:True

    C++ Type:bool

    Controllable:No

    Description:If true, then this Kernel is the time derivative of the fluid mass. If false, then this Kernel is the derivative of the fluid volume (which is common in poro-mechanics)

  • 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

    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.

Optional 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_tagssystem timeThe tag for the matrices this Kernel should fill

    Default:system time

    C++ Type:MultiMooseEnum

    Options:nontime, system, time

    Controllable:No

    Description:The tag for the matrices this Kernel should fill

  • vector_tagstimeThe tag for the vectors this Kernel should fill

    Default:time

    C++ Type:MultiMooseEnum

    Options:nontime, time

    Controllable:No

    Description:The tag for the vectors this Kernel should fill

Tagging 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.

  • diag_save_inThe name of auxiliary variables to save this Kernel'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<AuxVariableName>

    Controllable:No

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

  • 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

  • save_inThe name of auxiliary variables to save this Kernel'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<AuxVariableName>

    Controllable:No

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

  • seed0The seed for the master random number generator

    Default:0

    C++ Type:unsigned int

    Controllable:No

    Description:The seed for the master random number generator

  • 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

Input Files

References

No citations exist within this document.