TabulatedPVTFluidProperties

Isothermal fluid properties from a table of pressure, formation volume factor and viscosity (PVDO/PVDG style). 1/B and 1/(B mu) are interpolated linearly in pressure.

Overview

TabulatedPVTFluidProperties provides isothermal fluid properties from a table of pressure , formation volume factor and dynamic viscosity . This is the format used for dead oil (PVDO) and dry gas (PVDG) tables in black-oil reservoir simulators, so existing PVT data can be used directly in PorousFlow.

The formation volume factor is the ratio of the volume of the fluid at reservoir conditions to its volume at standard (surface) conditions. The density is therefore

where is the density at standard conditions (density_sc).

Interpolation

Following the convention of black-oil simulators, the quantities and are interpolated linearly in pressure, rather than and themselves. These quantities are proportional to the density and to the mobility of the fluid, and they vary much more linearly with pressure than does, particularly for gases. The viscosity is recovered as

The derivatives of density and viscosity with respect to pressure are computed exactly from the piecewise-linear interpolants, so they can be used in the Jacobian.

The interpolation uses the MOOSE LinearInterpolation utility.

Outside the tabulated pressure range, the behavior is set by out_of_bounds_behavior, which has the same options as TabulatedFluidProperties:

  • throw (default): an exception is thrown, so the time step is cut. This ensures that no results are computed with properties outside the range of the PVT data.

  • set_to_closest_bound: the pressure is moved to the closest bound of the table, so the end values of the table are used and the pressure derivatives are zero.

  • declare_invalid: as set_to_closest_bound, but the solution is also marked as invalid.

  • warn_invalid: as set_to_closest_bound, but a solution warning is also recorded.

  • ignore: and are extrapolated linearly using the first or last interval of the table. An exception is still thrown if the extrapolated values become non-positive.

warningwarning

With any option other than throw, results in parts of the domain where the pressure lies outside the table should be used with care: the fluid properties there are not supported by the PVT data. Where possible, extend the table to cover the expected pressure range instead.

Thermal properties

The table contains no temperature dependence, so the density and viscosity are independent of temperature. For use in non-isothermal simulations, a constant specific heat capacity at constant volume is used:

Example input syntax

[FluidProperties<<<{"href": "../../syntax/FluidProperties/index.html"}>>>]
  [oil]
    type = TabulatedPVTFluidProperties<<<{"description": "Isothermal fluid properties from a table of pressure, formation volume factor and viscosity (PVDO/PVDG style). 1/B and 1/(B mu) are interpolated linearly in pressure.", "href": "TabulatedPVTFluidProperties.html"}>>>
    density_sc<<<{"description": "Density of the fluid at standard (surface) conditions (kg/m^3)"}>>> = 850
    pressure<<<{"description": "Tabulated pressures (Pa). Must be strictly increasing"}>>> = '2.0E6 1.0E7 2.0E7 3.0E7'
    formation_volume_factor<<<{"description": "Formation volume factor B (reservoir volume / standard volume) at each tabulated pressure"}>>> = '1.062 1.050 1.038 1.028'
    viscosity<<<{"description": "Dynamic viscosity (Pa.s) at each tabulated pressure"}>>> = '1.04E-3 1.10E-3 1.17E-3 1.24E-3'
    cv<<<{"description": "Constant specific heat capacity at constant volume (J/kg/K)"}>>> = 2000
  []
[]
(modules/porous_flow/test/tests/fluids/tabulated_pvt.i)

The object is used with PorousFlowSingleComponentFluid, so it can be used for one phase of a two-phase oil-water simulation with, for example, PorousFlow2PhasePS.

Input Parameters

  • density_scDensity of the fluid at standard (surface) conditions (kg/m^3)

    C++ Type:Real

    Unit:(no unit assumed)

    Range:density_sc>0

    Controllable:No

    Description:Density of the fluid at standard (surface) conditions (kg/m^3)

  • formation_volume_factorFormation volume factor B (reservoir volume / standard volume) at each tabulated pressure

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Formation volume factor B (reservoir volume / standard volume) at each tabulated pressure

  • pressureTabulated pressures (Pa). Must be strictly increasing

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Tabulated pressures (Pa). Must be strictly increasing

  • viscosityDynamic viscosity (Pa.s) at each tabulated pressure

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Dynamic viscosity (Pa.s) at each tabulated pressure

Required Parameters

  • cv2000Constant specific heat capacity at constant volume (J/kg/K)

    Default:2000

    C++ Type:Real

    Unit:(no unit assumed)

    Range:cv>0

    Controllable:No

    Description:Constant specific heat capacity at constant volume (J/kg/K)

  • molar_massMolar mass of the fluid (kg/mol). Only needed if requested

    C++ Type:Real

    Unit:(no unit assumed)

    Range:molar_mass>0

    Controllable:No

    Description:Molar mass of the fluid (kg/mol). Only needed if requested

  • out_of_bounds_behaviorthrowProperty evaluation behavior when evaluated outside the tabulated pressure range. 'ignore': 1/B and 1/(B mu) are extrapolated linearly from the end intervals of the table; 'throw': an exception is thrown, so the time step is cut; 'set_to_closest_bound': the pressure is moved to the closest bound of the table; 'declare_invalid' and 'warn_invalid': as 'set_to_closest_bound', but the solution is also marked as invalid or a warning is recorded. Results computed outside the table should be used with care

    Default:throw

    C++ Type:MooseEnum

    Options:ignore, throw, declare_invalid, warn_invalid, set_to_closest_bound

    Controllable:No

    Description:Property evaluation behavior when evaluated outside the tabulated pressure range. 'ignore': 1/B and 1/(B mu) are extrapolated linearly from the end intervals of the table; 'throw': an exception is thrown, so the time step is cut; 'set_to_closest_bound': the pressure is moved to the closest bound of the table; 'declare_invalid' and 'warn_invalid': as 'set_to_closest_bound', but the solution is also marked as invalid or a warning is recorded. Results computed outside the table should be used with care

Optional Parameters

  • T_initial_guess400Temperature initial guess for Newton Method variable set conversion

    Default:400

    C++ Type:Real

    Unit:(no unit assumed)

    Range:T_initial_guess > 0

    Controllable:No

    Description:Temperature initial guess for Newton Method variable set conversion

  • max_newton_its100Maximum number of Newton iterations for variable set conversions

    Default:100

    C++ Type:unsigned int

    Controllable:No

    Description:Maximum number of Newton iterations for variable set conversions

  • p_initial_guess200000Pressure initial guess for Newton Method variable set conversion

    Default:200000

    C++ Type:Real

    Unit:(no unit assumed)

    Range:p_initial_guess > 0

    Controllable:No

    Description:Pressure initial guess for Newton Method variable set conversion

  • tolerance1e-08Tolerance for 2D Newton variable set conversion

    Default:1e-08

    C++ Type:Real

    Unit:(no unit assumed)

    Range:tolerance > 0

    Controllable:No

    Description:Tolerance for 2D Newton variable set conversion

  • verbose_newtonFalseWhether to output Newton inversion iterations to console

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to output Newton inversion iterations to console

Variable Set Conversions Newton Solve Parameters

  • allow_imperfect_jacobiansFalsetrue to allow unimplemented property derivative terms to be set to zero for the AD API

    Default:False

    C++ Type:bool

    Controllable:No

    Description:true to allow unimplemented property derivative terms to be set to zero for the AD API

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

  • fp_typesingle-phase-fpType of the fluid property object

    Default:single-phase-fp

    C++ Type:FPType

    Controllable:No

    Description:Type of the fluid property object

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