opendrift.models.openoil.adios.util.estimations

Oil Properties Estimations.

These are primitive estimation algorithms to be used primarily for estimating oil properties based on known measured values.

Module Contents

Functions

density_from_api(api)

Source: Adios2

api_from_density(density)

Source: Adios2

density_at_temp(ref_density, ref_temp_k, temp_k[, k_rho_t])

Source: Adios2

vol_expansion_coeff(rho_0, t_0, rho_1, t_1)

Calculate the volumetric expansion coefficient of a liquid

specific_gravity(density)

Specific Gravity of Oil with respect to water at 15C (definition used

dvis_to_kvis(dvis, density)

Source: Definition of kinematic viscosity.

kvis_at_temp(ref_kvis, ref_temp_k, temp_k[, k_v2])

Source: Adios2

resin_fraction(density, viscosity[, f_other])

asphaltene_fraction(density, viscosity[, f_other])

saturates_fraction(density, viscosity[, f_other])

aromatics_fraction(f_res, f_asph, f_sat)

_A_coeff(density)

Source: Fingas empirical formulas that are based upon analysis

_B_coeff(density, viscosity)

Source: Fingas empirical formulas that are based upon analysis

cut_temps_from_api(api[, N])

Source: Adios2 & Jones R. (1997),

fmasses_from_cuts(f_evap_i)

Generate distillation cut fractional masses from the

fmasses_flat_dist(f_res, f_asph[, N])

Generate a flat distribution of N distillation cut fractional masses.

saturate_mol_wt(boiling_point)

Source: Dr. M. R. Riazi,

aromatic_mol_wt(boiling_point)

Source: Dr. M. R. Riazi,

resin_mol_wt(_boiling_point)

Source: Recommendation from Bill Lehr

asphaltene_mol_wt(_boiling_point)

Source: Recommendation from Bill Lehr

trial_densities(boiling_points, watson_factor)

Source: Dr. M. R. Riazi,

saturate_densities(boiling_points)

aromatic_densities(boiling_points)

resin_densities(_boiling_points)

Note: We pass in a boiling point to remain consistent with the other

asphaltene_densities(_boiling_points)

Note: We pass in a boiling point to remain consistent with the other

_hydrocarbon_characterization_param(specific_gravity, ...)

Source: Dr. M. R. Riazi,

refractive_index(hc_char_param)

Source: Dr. M. R. Riazi,

_hydrocarbon_grouping_param(mol_wt, specific_gravity, ...)

Source: Dr. M. R. Riazi,

saturate_mass_fraction(fmass_i, mol_wt, ...)

Source: Dr. M. R. Riazi,

oil_water_surface_tension_from_api(api)

pour_point_from_kvis(ref_kvis, ref_temp_k)

Source: Adios2

pour_point_from_sg_mw_kvis(specific_gravity, mol_wt, kvis)

Source: Dr. M. R. Riazi,

flash_point_from_bp(temp_k)

Source: Reference: Chang A., K. Pashakanti, and Y. Liu (2012),

flash_point_from_api(api)

Source: Reference: Chang A., K. Pashakanti, and Y. Liu (2012),

bullwinkle_fraction_from_asph(f_asph)

Source: Adios2

bullwinkle_fraction_from_api(api)

Source: Adios2

opendrift.models.openoil.adios.util.estimations.density_from_api(api)[source]

Source: Adios2

API is a measure of how heavy an oil is compared to water. So it is a different unit for specific gravity

opendrift.models.openoil.adios.util.estimations.api_from_density(density)[source]

Source: Adios2

opendrift.models.openoil.adios.util.estimations.density_at_temp(ref_density, ref_temp_k, temp_k, k_rho_t=0.0008)[source]

Source: Adios2

If we have an oil density at a reference temperature, then we can estimate what its density might be at another temperature.

NOTE: need a reference for the coefficient of expansion

opendrift.models.openoil.adios.util.estimations.vol_expansion_coeff(rho_0, t_0, rho_1, t_1)[source]

Calculate the volumetric expansion coefficient of a liquid based on a set of two densities and their associated temperatures.

opendrift.models.openoil.adios.util.estimations.specific_gravity(density)[source]

Specific Gravity of Oil with respect to water at 15C (definition used for API gravity)

opendrift.models.openoil.adios.util.estimations.dvis_to_kvis(dvis, density)[source]

Source: Definition of kinematic viscosity.

Conversion from dynamic viscosity to kinematic viscosity.

opendrift.models.openoil.adios.util.estimations.kvis_at_temp(ref_kvis, ref_temp_k, temp_k, k_v2=2416.0)[source]

Source: Adios2

If we have an oil kinematic viscosity at a reference temperature, then we can estimate what its viscosity might be at another temperature.

Note: Bill’s most recent viscosity document, and an analysis of the

multi-KVis oils in our oil library suggest that a value of 2416.0 (Abu Eishah 1999) would be a good default value for k_v2.

opendrift.models.openoil.adios.util.estimations.resin_fraction(density, viscosity, f_other=0.0)[source]
opendrift.models.openoil.adios.util.estimations.asphaltene_fraction(density, viscosity, f_other=0.0)[source]
opendrift.models.openoil.adios.util.estimations.saturates_fraction(density, viscosity, f_other=0.0)[source]
opendrift.models.openoil.adios.util.estimations.aromatics_fraction(f_res, f_asph, f_sat)[source]
opendrift.models.openoil.adios.util.estimations._A_coeff(density)[source]
Source: Fingas empirical formulas that are based upon analysis

of ESTC oil properties database.

This is an intermediate calculation for a coefficient to be used to generate the inert mass fractions of an oil.

opendrift.models.openoil.adios.util.estimations._B_coeff(density, viscosity)[source]
Source: Fingas empirical formulas that are based upon analysis

of ESTC oil properties database.

This is an intermediate calculation for a coefficient to be used to generate the inert mass fractions of an oil.

opendrift.models.openoil.adios.util.estimations.cut_temps_from_api(api, N=5)[source]
Source: Adios2 & Jones R. (1997),

A Simplified Pseudo-component Oil Evaporation Model, Proceedings of the 20th Arctic and Marine Oil Spill Program, Vancouver, CA, Vol. 1, pp. 43-62

Generate distillation cut temperatures from the oil’s API.

opendrift.models.openoil.adios.util.estimations.fmasses_from_cuts(f_evap_i)[source]

Generate distillation cut fractional masses from the cumulative distillation fractions in the cut data.

opendrift.models.openoil.adios.util.estimations.fmasses_flat_dist(f_res, f_asph, N=5)[source]

Generate a flat distribution of N distillation cut fractional masses.

opendrift.models.openoil.adios.util.estimations.saturate_mol_wt(boiling_point)[source]
Source: Dr. M. R. Riazi,

Characterization and Properties of Petroleum Fractions eq. 2.48 and table 2.6

Note: for this to actually work in every case, we need to limit

our temperature to: - T_i < 1070.0 - T_i > - T_i > 1070.0 - exp(6.98291) (roughly about == -8.06)

opendrift.models.openoil.adios.util.estimations.aromatic_mol_wt(boiling_point)[source]
Source: Dr. M. R. Riazi,

Characterization and Properties of Petroleum Fractions eq. 2.48 and table 2.6

Note: for this to actually work in every case, we need to limit

our temperature to: - T_i < 1015.0 - T_i > 1015.0 - exp(6.911) (roughly about == 11.76)

opendrift.models.openoil.adios.util.estimations.resin_mol_wt(_boiling_point)[source]

Source: Recommendation from Bill Lehr

Note: We pass in a boiling point to remain consistent with the other

molecular weight functions, even though it is not used.

Note: We return a scalar in all cases. This should still work with

numpy array operations, but probably not with regular Python sequence types. We can fix this if the need arises.

opendrift.models.openoil.adios.util.estimations.asphaltene_mol_wt(_boiling_point)[source]

Source: Recommendation from Bill Lehr

Note: We pass in a boiling point to remain consistent with the other

molecular weight functions, even though it is not used.

Note: We return a scalar in all cases. This should still work with

numpy array operations, but probably not with regular Python sequence types. We can fix this if the need arises.

opendrift.models.openoil.adios.util.estimations.trial_densities(boiling_points, watson_factor)[source]
Source: Dr. M. R. Riazi,

Characterization and Properties of Petroleum Fractions eq. 2.13 and table 9.6

Generate an initial estimate of volatile oil components based on boiling points and the Watson Characterization Factor. This is only good for estimating Aromatics & Saturates.

opendrift.models.openoil.adios.util.estimations.saturate_densities(boiling_points)[source]
opendrift.models.openoil.adios.util.estimations.aromatic_densities(boiling_points)[source]
opendrift.models.openoil.adios.util.estimations.resin_densities(_boiling_points)[source]
Note: We pass in a boiling point to remain consistent with the other

molecular weight functions, even though it is not used.

Note: We return a scalar in all cases. This should still work with

numpy array operations, but probably not with regular Python sequence types. We can fix this if the need arises.

opendrift.models.openoil.adios.util.estimations.asphaltene_densities(_boiling_points)[source]
Note: We pass in a boiling point to remain consistent with the other

molecular weight functions, even though it is not used.

Note: We return a scalar in all cases. This should still work with

numpy array operations, but probably not with regular Python sequence types. We can fix this if the need arises.

opendrift.models.openoil.adios.util.estimations._hydrocarbon_characterization_param(specific_gravity, temp_k)[source]
Source: Dr. M. R. Riazi,

Characterization and Properties of Petroleum Fractions eq. 2.115

Source: Huang, P. K. (1977),

Characterization and Thermodynamic Correlations for Undefined Hydrocarbon Mixtures, Ph.D. Dissertation Pennsylvania State University, University Park, PA,

This is a characterization parameter, designated as I, that was first used by Huang to correlate hydrocarbon properties

opendrift.models.openoil.adios.util.estimations.refractive_index(hc_char_param)[source]
Source: Dr. M. R. Riazi,

Characterization and Properties of Petroleum Fractions eq. 2.114

This is the refractive index of liquid hydrocarbons at 20C, correlated through parameter I

opendrift.models.openoil.adios.util.estimations._hydrocarbon_grouping_param(mol_wt, specific_gravity, temp_k)[source]
Source: Dr. M. R. Riazi,

Characterization and Properties of Petroleum Fractions eq. 3.50

This is a hydrocarbon grouping parameter correlated through the molecular weight and the refractive index. Riazi claims that it: - separates paraffins and aromatics - identifies various hydrocarbon types

opendrift.models.openoil.adios.util.estimations.saturate_mass_fraction(fmass_i, mol_wt, specific_gravity, temp_k)[source]
Source: Dr. M. R. Riazi,

Characterization and Properties of Petroleum Fractions eqs. 3.77 and 3.78

For a petroleum hydrocarbon fraction in which the molecular weight, specific gravity, and boiling point are known, we can estimate the fraction of that substance which contains saturate compounds. When forming his equations, Riazi deals with the PNA composition, which essentially means Paraffins, Naphthenes, and Aromatics. And for our purposes, the saturates include the paraffins and naphthenes.

opendrift.models.openoil.adios.util.estimations.oil_water_surface_tension_from_api(api)[source]
opendrift.models.openoil.adios.util.estimations.pour_point_from_kvis(ref_kvis, ref_temp_k)[source]

Source: Adios2

If we have an oil kinematic viscosity at a reference temperature, then we can estimate what its pour point might be.

opendrift.models.openoil.adios.util.estimations.pour_point_from_sg_mw_kvis(specific_gravity, mol_wt, kvis)[source]
Source: Dr. M. R. Riazi,

Characterization and Properties of Petroleum Fractions eq. 3.119

Another way of estimating pour point. These inputs may not be available for most imported oil records.

opendrift.models.openoil.adios.util.estimations.flash_point_from_bp(temp_k)[source]
Source: Reference: Chang A., K. Pashakanti, and Y. Liu (2012),

Integrated Process Modeling and Optimization, Wiley Verlag.

opendrift.models.openoil.adios.util.estimations.flash_point_from_api(api)[source]
Source: Reference: Chang A., K. Pashakanti, and Y. Liu (2012),

Integrated Process Modeling and Optimization, Wiley Verlag.

opendrift.models.openoil.adios.util.estimations.bullwinkle_fraction_from_asph(f_asph)[source]

Source: Adios2

opendrift.models.openoil.adios.util.estimations.bullwinkle_fraction_from_api(api)[source]

Source: Adios2