Esempio n. 1
0
def get_corrected_density_and_viscosity(oil):
    '''
        Get coefficients for calculating resin (and asphaltene) fractions
        based on Merv Fingas' empirical analysis of ESTC oil properties
        database.
        - Bill has clarified that we want to get the coefficients for just
          the 15C Density
        - Mervs calculations depend on a density measured in g/mL and a
          viscosity measured in mPa.s, so we do a conversion here.
    '''
    try:
        temperature = 273.15 + 15
        P0_oil = density_at_temperature(oil, temperature)
        V0_oil = get_viscosity(oil, temperature)
        a = 10 * exp(0.001 * P0_oil)
        b = 10 * log(1000.0 * P0_oil * V0_oil)

    except:
        print 'get_corrected_density_and_viscosity() generated exception:'
        print '\toil = ', oil
        print '\toil.kvis = ', oil.kvis
        print '\tP0_oil = ', density_at_temperature(oil, temperature)
        print '\tV0_oil = ', get_viscosity(oil, temperature)
        raise

    return a, b
def test_get_viscosity(temps, exp_value, use_out):
    if use_out:
        out = np.zeros_like(temps)
        get_viscosity(oil_, temps, out)
    else:
        out = get_viscosity(oil_, temps)
    assert np.all(out == exp_value)   # so it works for scalar + arrays
Esempio n. 3
0
def get_corrected_density_and_viscosity(oil):
    '''
        Get coefficients for calculating resin (and asphaltene) fractions
        based on Merv Fingas' empirical analysis of ESTC oil properties
        database.
        - Bill has clarified that we want to get the coefficients for just
          the 15C Density
        - Mervs calculations depend on a density measured in g/mL and a
          viscosity measured in mPa.s, so we do a conversion here.
    '''
    try:
        temperature = 273.15 + 15
        P0_oil = density_at_temperature(oil, temperature)
        V0_oil = get_viscosity(oil, temperature)
        a = 10 * exp(0.001 * P0_oil)
        b = 10 * log(1000.0 * P0_oil * V0_oil)

    except:
        print 'get_corrected_density_and_viscosity() generated exception:'
        print '\toil = ', oil
        print '\toil.kvis = ', oil.kvis
        print '\tP0_oil = ', density_at_temperature(oil, temperature)
        print '\tV0_oil = ', get_viscosity(oil, temperature)
        raise

    return a, b
Esempio n. 4
0
def test_get_viscosity(temps, exp_value, use_out):
    if use_out:
        out = np.zeros_like(temps)
        get_viscosity(oil_, temps, out)
    else:
        out = get_viscosity(oil_, temps)

    assert np.all(out == exp_value)  # so it works for scalar + arrays
Esempio n. 5
0
def show_uncategorized_oils(session):
    oils = (session.query(Oil)
            .filter(Oil.categories == None)
            .all())

    fd = open('temp.txt', 'w')
    fd.write('adios_oil_id\t'
             'product_type\t'
             'api\t'
             'viscosity\t'
             'pour_point\t'
             'name\n')
    print ('{0} oils uncategorized.'
           .format(len(oils)))
    for o in oils:
        if o.api >= 0:
            if o.api < 15:
                category_temp = 273.15 + 50
            else:
                category_temp = 273.15 + 38
            viscosity = uc.convert('Kinematic Viscosity', 'm^2/s', 'cSt',
                                   get_viscosity(o, category_temp))
        else:
            viscosity = None

        fd.write('{0.imported.adios_oil_id}\t'
                 '{0.imported.product_type}\t'
                 '{0.api}\t'
                 '{1}\t'
                 '({0.pour_point_min_k}, {0.pour_point_max_k})\t'
                 '{0.name}\n'
                 .format(o, viscosity))
Esempio n. 6
0
def link_refined_fuel_oil_6(session):
    '''
       Category Name:
       - Fuel Oil #6/Bunker/Heavy Fuel Oil/Group V
       Sample Oils:
       - Bunker C
       - Residual Oil
       Density Criteria:
       - API < 15
       Kinematic Viscosity Criteria:
       - 200.0 <= v cSt @ 50 degrees Celcius
    '''
    top_category = (session.query(Category)
                    .filter(Category.parent == None)
                    .filter(Category.name == 'Refined').one())
    categories = [c for c in top_category.children
                  if c.name in ('Fuel Oil 6',
                                'Bunker',
                                'Heavy Fuel Oil',
                                'Group V')
                  ]

    oils = get_oils_by_api(session, 'Refined',
                           api_min=0.0, api_max=15.0)

    count = 0
    category_temp = 273.15 + 50
    for o in oils:
        viscosity = uc.convert('Kinematic Viscosity', 'm^2/s', 'cSt',
                               get_viscosity(o, category_temp))

        if viscosity >= 200.0:
            for category in categories:
                o.categories.append(category)
            count += 1

    print ('{0} oils added to {1} -> {2}.'
           .format(count, top_category.name,
                   [n.name for n in categories]))
    transaction.commit()
Esempio n. 7
0
def link_refined_fuel_oil_2(session):
    '''
       Category Name:
       - Fuel oil #2/Diesel/Heating Oil
       Sample Oils:
       - Diesel
       - Heating Oil
       - No. 2 Distillate
       Density Criteria:
       - 30 <= API < 35
       Kinematic Viscosity Criteria:
       - 2.5 < v <= 4.0 cSt @ 38 degrees Celcius
    '''
    top_category = (session.query(Category)
                    .filter(Category.parent == None)
                    .filter(Category.name == 'Refined').one())
    categories = [c for c in top_category.children
                  if c.name in ('Fuel Oil 2',
                                'Diesel',
                                'Heating Oil')
                  ]

    oils = get_oils_by_api(session, 'Refined',
                           api_min=30.0, api_max=35.0)

    count = 0
    category_temp = 273.15 + 38
    for o in oils:
        viscosity = uc.convert('Kinematic Viscosity', 'm^2/s', 'cSt',
                               get_viscosity(o, category_temp))

        if viscosity > 2.5 or viscosity <= 4.0:
            for category in categories:
                o.categories.append(category)
            count += 1

    print ('{0} oils added to {1} -> {2}.'
           .format(count, top_category.name,
                   [n.name for n in categories]))
    transaction.commit()
Esempio n. 8
0
def link_refined_fuel_oil_1(session):
    '''
       Category Name:
       - Fuel oil #1/gasoline/kerosene
       Sample Oils:
       - gasoline
       - kerosene
       - JP-4
       - avgas
       Density Criteria:
       - API >= 35
       Kinematic Viscosity Criteria:
       - v <= 2.5 cSt @ 38 degrees Celcius
    '''
    top_category = (session.query(Category)
                    .filter(Category.parent == None)
                    .filter(Category.name == 'Refined').one())
    categories = [c for c in top_category.children
                  if c.name in ('Light Products (Fuel Oil 1)',
                                'Gasoline',
                                'Kerosene')
                  ]

    oils = get_oils_by_api(session, 'Refined', api_min=35.0)

    count = 0
    category_temp = 273.15 + 38
    for o in oils:
        viscosity = uc.convert('Kinematic Viscosity', 'm^2/s', 'cSt',
                               get_viscosity(o, category_temp))

        if viscosity <= 2.5:
            for category in categories:
                o.categories.append(category)
            count += 1

    print ('{0} oils added to {1} -> {2}.'
           .format(count, top_category.name,
                   [n.name for n in categories]))
    transaction.commit()
Esempio n. 9
0
def link_refined_ifo(session):
    '''
       Category Name:
       - Intermediate Fuel Oil
       Sample Oils:
       - IFO 180
       - Fuel Oil #4
       - Marine Diesel
       Density Criteria:
       - 15 <= API < 30
       Kinematic Viscosity Criteria:
       - 4.0 < v < 200.0 cSt @ 38 degrees Celcius
    '''
    top_category = (session.query(Category)
                    .filter(Category.parent == None)
                    .filter(Category.name == 'Refined').one())
    categories = [c for c in top_category.children
                  if c.name in ('Intermediate Fuel Oil',)
                  ]

    oils = get_oils_by_api(session, 'Refined',
                           api_min=15.0, api_max=30.0)

    count = 0
    category_temp = 273.15 + 38
    for o in oils:
        viscosity = uc.convert('Kinematic Viscosity', 'm^2/s', 'cSt',
                               get_viscosity(o, category_temp))

        if viscosity > 4.0 or viscosity < 200.0:
            for category in categories:
                o.categories.append(category)
            count += 1

    print ('{0} oils added to {1} -> {2}.'
           .format(count, top_category.name,
                   [n.name for n in categories]))
    transaction.commit()
Esempio n. 10
0
     (np.asarray(density_tests), np.asarray(density_exp), False),
     (np.asarray(density_tests), np.asarray(density_exp), True)])
def test_get_density(temps, exp_value, use_out):
    if use_out:
        out = np.zeros_like(temps)
        get_density(oil_, temps, out)
    else:
        out = get_density(oil_, temps)
    assert np.all(out == exp_value)  # so it works for scalar + arrays


# Test case - get ref temps from kvis then append ref_temp for
# kvis at 0th index for a few more values:
#    viscosity_tests = [d.ref_temp_k for d in oil_.densities]
#    viscosity_tests.append(oil_.densities[0].ref_temp_k)
v_max = get_viscosity(oil_, get_pour_point(oil_), clip_to_vmax=False)

viscosity_tests = [
    oil_.kvis[ix].ref_temp_k
    if ix < len(oil_.kvis) else oil_.kvis[0].ref_temp_k
    for ix in range(0,
                    len(oil_.kvis) + 3)
]

viscosity_exp = [(d.m_2_s, v_max)[v_max < d.m_2_s] for temp in viscosity_tests
                 for d in oil_.kvis if abs(d.ref_temp_k - temp) == 0]


@pytest.mark.parametrize(
    ("temps", "exp_value", "use_out"),
    [(viscosity_tests[0], viscosity_exp[0], False),
from pyramid.paster import get_appsettings, setup_logging

from oil_library import _get_db_session
from oil_library.models import Base, ImportedRecord, Oil, Density, Toxicity, Category
from oil_library.oil_props import OilProps

from oil_library.utilities import get_viscosity, get_boiling_points_from_api
from oil_library.init_oil import density_at_temperature


session = _get_db_session()

oil_obj = session.query(Oil).filter(Oil.name == "ALASKA NORTH SLOPE").one()
props_obj = OilProps(oil_obj)

viscosity = uc.convert("Kinematic Viscosity", "m^2/s", "cSt", get_viscosity(oil_obj, 273.15 + 38))

print oil_obj, "\n\tviscosity at 38C =", viscosity
for v in oil_obj.kvis:
    v_ref, t_ref = v.m_2_s, v.ref_temp_k
    print "\tviscosity: {0} m^2/s at {1}K".format(v.m_2_s, v.ref_temp_k)
print "imported pour points:", (oil_obj.imported.pour_point_min_k, oil_obj.imported.pour_point_max_k)
print "oil pour points:", (oil_obj.pour_point_min_k, oil_obj.pour_point_max_k)


def get_ptry_values(oil_obj, component_type, sub_fraction=None):
    """
        This gives an initial trial estimate for each density component.

        In theory the fractionally weighted average of these densities,
        combined with the fractionally weighted average resin and asphaltene
Esempio n. 12
0
                          (np.asarray(density_tests),
                           np.asarray(density_exp), True)])
def test_get_density(temps, exp_value, use_out):
    if use_out:
        out = np.zeros_like(temps)
        get_density(oil_, temps, out)
    else:
        out = get_density(oil_, temps)
    assert np.all(out == exp_value)   # so it works for scalar + arrays


# Test case - get ref temps from kvis then append ref_temp for
# kvis at 0th index for a few more values:
#    viscosity_tests = [d.ref_temp_k for d in oil_.densities]
#    viscosity_tests.append(oil_.densities[0].ref_temp_k)
v_max = get_viscosity(oil_, get_pour_point(oil_), clip_to_vmax=False)

viscosity_tests = [oil_.kvis[ix].ref_temp_k if ix < len(oil_.kvis)
                   else oil_.kvis[0].ref_temp_k
                   for ix in range(0, len(oil_.kvis) + 3)]

viscosity_exp = [(d.m_2_s, v_max)[v_max < d.m_2_s]
                 for temp in viscosity_tests
                 for d in oil_.kvis
                 if abs(d.ref_temp_k - temp) == 0]


@pytest.mark.parametrize(("temps", "exp_value", "use_out"),
                         [(viscosity_tests[0], viscosity_exp[0], False),
                          (viscosity_tests, viscosity_exp, False),
                          (tuple(viscosity_tests), viscosity_exp, False),