PorousFlowSingleComponentFluid

This Material calculates fluid properties at the quadpoints or nodes for a single component fluid

Most of MOOSE is independent of the choice of units, but the units must be kept consistent throughout the input file.

  • For instance, time can be measured in seconds, nano-seconds, years, etc, providing this choice is used everywhere.

  • For instance, you must specify fluid bulk modulus and solid Young's modulus using the same units (for example, both in GPa).

commentnote

PorousFlow does not check the consistency of units in the input file.

However, the FluidProperties module assumes that the pressure units are Pascals, the time units are seconds, temperature is measured in Kelvin, distance is measured in metres, mass in kilograms and energy in Joules. Therefore, when using this module, users are ordinarily restricted to using these standard SI units. Almost all PorousFlow input files use the FluidProperties module. Therefore it is recommended to use these standard SI units everywhere in your input file.

Alternate unit choices

PorousFlowSingleComponentFluid allows different units to be employed: it modifies the input and output of the FluidProperties module to reflect the choice of units.

  • For instance, suppose you choose to measure temperature in Celsius. Then PorousFlowSingleComponentFluid will add 273.15 to your temperature before feeding it to the FluidProperties module. No other alterations to the FluidProperties input/output are needed.

  • For instance, suppose you choose to measure pressure in MPa. Then PorousFlowSingleComponentFluid will multiply your pressure by before feeding it to the FluidProperties module. Since the viscosity returned by the FluidProperties module has units Pa.s, it needs to be converted to MPa.s before using it in the remainder of PorousFlow, so the FluidProperties viscosity is multiplied by .

commentnote

If you choose non-default SI units, you must ensure that all the other parameters in your input file use these non-default units. For instance, if you choose to measure pressure in MPa, then your solid-mechanical stresses, Young's moduli, strengths, etc, must also be specified in MPa. That is, PorousFlowSingleComponentFluid only interfaces with the FluidProperties module: it doesn't also change your pressure boundary conditions, end time, gravity, etc: all these must be specified by you in the units you choose.

An essay on Pascals, kilograms and densities

In most PorousFlow simulations, it is convenient to use the unit system: pressure, distance, time, and energy. Note that mass is not included since Using Pascals rather than kilograms is a different convention to most other physics, and means that, strictly, masses and densities should be thought of in terms of Pascals.

This is quite annoying, however, for if something has a mass of 10kg, and you want to employ MPa instead of Pa, strictly you should write the mass as 10MPa.m.s. Similar remarks hold for density (kg.m), enthalpy and internal energy (J.kg), heat capacity (J.kg.K), and mass fluxes (kg.m.s). Everything gets changed!

Fortunately, density appears as a multiplicative factor almost everywhere, so scaling it by a constant amount (eg, multiplying by 10 when using MPa instead of Pa) leads to the same equations. For consider the fluid equations: Obviously, scaling will lead to the same equation. The only thing to be careful of is the inside the Darcy velocity, which is discussed below. The heat equation is Since scales inversely to (with respect to mass and pressure) the quotient is independent of the mass unit (it has units energy.distance). The same remark holds for . The solid-mechanics conservation of momentum reads Here, the on the left-hand side must be measured in the "Pascals" units described above. The on the right-hand side should be too, although often the body force is due to gravity, so may be treated as described below.

Suggested approach

Continue to think in terms of kilograms:

  • specify fluid density in kg.m

  • specify enthalpy and internal energy in J.kg

  • specify mass fluxes in kg.m.s

  • specify heat capacity in J.kg.K

but modify gravity and the acceleration terms in the solid-mechanics equations, as described below.

warningwarning

This is the approach used by PorousFlowSingleComponentFluid. That is, when you use non-default units, PorousFlowSingleComponentFluid does not modify the fluid density, fluid enthalpy and fluid internal energy returned by the FluidProperties module.

Addressing the issue of gravity in the Darcy velocity and solid-mechanics body force

The product appears in the Darcy velocity. The product appears in the solid-mechanics equation. Strictly, we should measure in units pressure.time.distance (eg, Pa.s.m) in each of these, but we have found that to be inconvenient, so we modify the accelerations and instead, in order to achieve the correct result for the products and . Table 1 should help.

Table 1: Examples of and to use in the terms and , in different units

ValueUnits used
m.s
Pascals (Pa)
MPa
GPa

Addressing the issue of the solid-mechanics acceleration

If you use time-dependent solid mechanics, with the term you must measure in units of pressure.time.distance. Table 2 should help.

Table 2: Examples of to use in , in different units

ValueUnits used
kg.m
Pascals (Pa), seconds
MPa, seconds
Pa, hours
MPa, hours
Pa, days
MPa, days
MPa, years
MPa, years

Available unit systems

PorousFlowSingleComponentFluid includes the following choices for unit systems

Default: Pascals, seconds and Kelvin

No changes to the input or output of the FluidProperties module are required

Temperature in Celsius

Choosing the temperature unit to be Celsius means that 273.15 is added to all PorousFlow temperatures before feeding them to the FluidProperties module.

Other input-file objects that may need to be specified in Celsius are boundary conditions, initial conditions, PorousFlowSinks, etc.

All objects in the input file need to be specified in Celsius, except the FluidProperties objects. For example, if using the SimpleFluidProperties, then you must remember the seen by SimpleFluidProperties will be measured in Kelvin.

Pressure (and stress) in MPa

Choosing the pressure unit to be MPa means that the PorousFlow pressures are multiplied by before feeding them to the FluidProperties module. The viscosity returned by the FluidProperties module is multiplied by (and any quantity from choosing non-default time units) before handing back to the remainder of PorousFlow.

In addition, you must remember that solid mechanical stresses should be measured in MPa, so moduli and strengths need to be specified in MPa. Similarly, boundary tractions or pressures need to be specified in MPa.

Remember that the FluidProperties module always uses Pa, m, s and J. Therefore, when using SimpleFluidProperties you must specify the bulk modulus and viscosity in these units, not using MPa.

Alternate time units

Choosing the time unit to be hours means no change is made to the inputs to the FluidProperties module.

You must remember that fluid and heat sources must be measured in kg.m.time and J.m.time, respectively (where "time" is "hours", "days" or "years" depending on your specific choice). Remember too that the thermal conductivity of the solid skeleton must be measured in J.m.K.time. Velocities, radioactive decay rates, chemical precipitation and reaction rates, dispersion tensors and diffusion coefficients are similarly impacted.

Remember that the FluidProperties module always uses Pa, m, s and J. Therefore, when using SimpleFluidProperties you must specify the fluid thermal conductivity and viscosity in these units, not using hours, days or years.

Hours

The viscosity returned by the FluidProperties module is multiplied by (and any quantity from choosing non-default pressure units) before handing back to the remainder of PorousFlow.

Days

The viscosity returned by the FluidProperties module is multiplied by (and any quantity from choosing non-default pressure units) before handing back to the remainder of PorousFlow.

Julian years

The viscosity returned by the FluidProperties module is multiplied by (and any quantity from choosing non-default pressure units) before handing back to the remainder of PorousFlow.

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

  • fpThe name of the user object for fluid properties

    C++ Type:UserObjectName

    Controllable:No

    Description:The name of the user object for fluid properties

  • phaseThe phase number

    C++ Type:unsigned int

    Controllable:No

    Description:The phase number

Required Parameters

  • at_nodesFalseEvaluate Material properties at nodes instead of quadpoints

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Evaluate Material properties at nodes instead of quadpoints

  • 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

  • boundaryThe list of boundaries (ids or names) from the mesh where this object applies

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

    Controllable:No

    Description:The list of boundaries (ids or names) from the mesh where this object applies

  • computeTrueWhen false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:When false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.

  • compute_density_and_viscosityTrueCompute the fluid density and viscosity

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Compute the fluid density and viscosity

  • compute_enthalpyTrueCompute the fluid enthalpy

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Compute the fluid enthalpy

  • compute_internal_energyTrueCompute the fluid internal energy

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Compute the fluid internal energy

  • constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped

    Default:NONE

    C++ Type:MooseEnum

    Options:NONE, ELEMENT, SUBDOMAIN

    Controllable:No

    Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped

  • declare_suffixAn optional suffix parameter that can be appended to any declared 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 declared properties. The suffix will be prepended with a '_' character.

  • pressure_unitPaThe unit of the pressure variable used everywhere in the input file except for in the FluidProperties-module objects

    Default:Pa

    C++ Type:MooseEnum

    Options:Pa, MPa

    Controllable:No

    Description:The unit of the pressure variable used everywhere in the input file except for in the FluidProperties-module objects

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

  • temperature_unitKelvinThe unit of the temperature variable

    Default:Kelvin

    C++ Type:MooseEnum

    Options:Kelvin, Celsius

    Controllable:No

    Description:The unit of the temperature variable

  • time_unitsecondsThe unit of time used everywhere in the input file except for in the FluidProperties-module objects

    Default:seconds

    C++ Type:MooseEnum

    Options:seconds, hours, days, years

    Controllable:No

    Description:The unit of time used everywhere in the input file except for in the FluidProperties-module objects

  • 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

  • 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

  • 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

  • output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)

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

    Controllable:No

    Description:List of material properties, from this material, to output (outputs must also be defined to an output type)

  • outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object

    Default:none

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

    Controllable:No

    Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object

Outputs Parameters

Input Files