- 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
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: asset_to_closest_bound, but the solution is also marked as invalid.warn_invalid: asset_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.
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
- 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
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.