- variableThe name of the variable that this Kernel operates on
C++ Type:NonlinearVariableName

Description:The name of the variable that this Kernel operates on

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

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

# 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-derivatve terms from the fluid governing equation are (1) 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 (2) the time derivative terms may be written as (3) Here is the so-called Biot Modulus: (4) and is an effective volumetric thermal expansion coefficient: (5) Notice that disregarding the premultiplication by , the above time-derivative terms in Eq. (3) 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.

PorousFlowConstantBiotModulus Material, which computes given by Eq. (4) 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.

PorousFlowConstantThermalExpansionCoefficient Material, which computes given by Eq. (5) 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.

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 unecessary 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 parenthases 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

- blockThe list of block ids (SubdomainID) that this object will be applied
C++ Type:std::vector

Description:The list of block ids (SubdomainID) that this object will be applied

- biot_coefficient1Biot coefficient
Default:1

C++ Type:double

Description:Biot coefficient

- 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

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

- 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

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)

### 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 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

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

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

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

- 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_tagstimeThe tag for the vectors this Kernel should fill
Default:time

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_tagssystem timeThe tag for the matrices this Kernel should fill
Default:system time

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/jacobian/mass01_fully_saturated.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_fully_saturated_2.i
- modules/porous_flow/test/tests/poro_elasticity/mandel_fully_saturated.i
- modules/porous_flow/test/tests/poro_elasticity/terzaghi_fully_saturated_volume.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_fully_saturated.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_fully_saturated_volume.i
- modules/porous_flow/test/tests/poro_elasticity/mandel_fully_saturated_volume.i