Beispiel #1
0
def get_oil_densities_at_5c(oil_columns, field_indexes, weathering):
    densities = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'density_at_0_5_c_g_ml_astm_d5002')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        density_obj = dict(list(zip(prop_names, [v[0].value for v in vals])))

        # add some properties to the oil that we expect
        density_obj['idx'] = idx
        density_obj['weathering'] = weathering[idx]
        density_obj['ref_temp_k'] = 273.15 + 5.0

        density_obj['kg_m_3'] = density_obj['density_5_c_g_ml']
        if density_obj['kg_m_3'] is not None:
            density_obj['kg_m_3'] *= 1000.0

        # prune some properties that we don't want in our object
        del density_obj['density_0_c_g_ml']
        del density_obj['density_5_c_g_ml']

        densities.append(density_obj)

    return [Density(**d) for d in densities if d['kg_m_3'] not in (None, 0.0)]
def get_oil_tensions_at_5c(oil_columns, field_indexes, weathering):
    tensions = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'surface_interfacial_tension_'
                                           'at_0_5_c_mn_m_or_dynes_cm')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        tension_obj = build_tension_kwargs(prop_names, vals,
                                           'surface_tension_5_c_oil_air',
                                           weathering[idx],
                                           273.15 + 5.0, 'air')
        tensions.append(tension_obj)

        tension_obj = build_tension_kwargs(prop_names, vals,
                                           'interfacial_tension_5_c_oil_water',
                                           weathering[idx],
                                           273.15 + 5.0, 'water')
        tensions.append(tension_obj)

        tension_obj = build_tension_kwargs(prop_names, vals,
                                           'interfacial_tension_'
                                           '5_c_oil_salt_water_3_3_nacl',
                                           weathering[idx],
                                           273.15 + 5.0, 'seawater')
        tensions.append(tension_obj)

    return [InterfacialTension(**t) for t in tensions
            if t['n_m'] not in (None, 0.0)]
Beispiel #3
0
def get_oil_tensions_at_5c(oil_columns, field_indexes, weathering):
    tensions = []

    props = get_oil_properties_by_category(
        oil_columns, field_indexes, 'surface_interfacial_tension_'
        'at_0_5_c_mn_m_or_dynes_cm')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        tension_obj = build_tension_kwargs(prop_names, vals,
                                           'surface_tension_5_c_oil_air',
                                           weathering[idx], 273.15 + 5.0,
                                           'air')
        tensions.append(tension_obj)

        tension_obj = build_tension_kwargs(
            prop_names, vals, 'interfacial_tension_5_c_oil_water',
            weathering[idx], 273.15 + 5.0, 'water')
        tensions.append(tension_obj)

        tension_obj = build_tension_kwargs(
            prop_names, vals, 'interfacial_tension_'
            '5_c_oil_salt_water_3_3_nacl', weathering[idx], 273.15 + 5.0,
            'seawater')
        tensions.append(tension_obj)

    return [
        InterfacialTension(**t) for t in tensions
        if t['n_m'] not in (None, 0.0)
    ]
Beispiel #4
0
def get_adhesions_by_weathering(oil_columns, field_indexes, weathering):
    adhesions = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'adhesion_g_cm2_ests_1996')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        adhesion_kwargs = build_adhesion_kwargs(prop_names, vals,
                                                weathering[idx])
        adhesions.append(adhesion_kwargs)

    return [Adhesion(**a) for a in adhesions if a['kg_m_2'] is not None]
def get_cuts_from_bp_distribution(oil_columns, field_indexes, weathering):
    cuts = []

    props = get_oil_properties_by_category(
        oil_columns, field_indexes, 'boiling_point_'
        'distribution_temperature_c')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        cuts_from_dist = build_cuts_from_dist_data(prop_names, vals,
                                                   weathering[idx])
        cuts.extend(cuts_from_dist)

    return [c for c in cuts if c.vapor_temp_k is not None]
Beispiel #6
0
def get_water_content_by_weathering(oil_columns, field_indexes, weathering):
    water_contents = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'water_content_astm_e203')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        kwargs = build_kwargs(prop_names, vals, weathering[idx])
        water_contents.append(kwargs)

    return [percent_to_fraction(get_op_and_value(f['water_content'])[1])
            for f in water_contents
            if f['water_content'] is not None]
def get_flash_points_by_weathering(oil_columns, field_indexes, weathering):
    flash_points = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'flash_point_c')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        flash_point_obj = build_flash_point_kwargs(prop_names, vals,
                                                   weathering[idx])
        flash_points.append(flash_point_obj)

    return [FlashPoint(**f) for f in flash_points
            if f['min_temp_k'] is not None or f['max_temp_k'] is not None]
Beispiel #8
0
def get_adhesions_by_weathering(oil_columns, field_indexes, weathering):
    adhesions = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'adhesion_g_cm2_ests_1996')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        adhesion_kwargs = build_adhesion_kwargs(prop_names, vals,
                                                weathering[idx])
        adhesions.append(adhesion_kwargs)

    return [Adhesion(**a) for a in adhesions
            if a['kg_m_2'] is not None]
def get_cuts_from_bp_cumulative_frac(oil_columns, field_indexes, weathering):
    cuts = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'boiling_point_'
                                           'cumulative_weight_fraction')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        cuts_from_dist = build_cuts_from_cumulative_fraction(prop_names, vals,
                                                             weathering[idx])
        cuts.extend(cuts_from_dist)

    return [c for c in cuts if c.fraction is not None]
def get_cuts_from_bp_distribution(oil_columns, field_indexes, weathering):
    cuts = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'boiling_point_'
                                           'distribution_temperature_c')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        cuts_from_dist = build_cuts_from_dist_data(prop_names, vals,
                                                   weathering[idx])
        cuts.extend(cuts_from_dist)

    return [c for c in cuts if c.vapor_temp_k is not None]
Beispiel #11
0
def get_cuts_from_bp_cumulative_frac(oil_columns, field_indexes, weathering):
    cuts = []

    props = get_oil_properties_by_category(
        oil_columns, field_indexes, 'boiling_point_'
        'cumulative_weight_fraction')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        cuts_from_dist = build_cuts_from_cumulative_fraction(
            prop_names, vals, weathering[idx])
        cuts.extend(cuts_from_dist)

    return [c for c in cuts if c.fraction is not None]
Beispiel #12
0
def get_wax_content_by_weathering(oil_columns, field_indexes, weathering):
    wax_contents = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'wax_content_ests_1994')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        kwargs = build_kwargs(prop_names, vals, weathering[idx],
                              props_to_rename={'waxes': 'wax_content'})
        wax_contents.append(kwargs)

    return [percent_to_fraction(f['wax_content'])
            for f in wax_contents
            if f['wax_content'] is not None]
Beispiel #13
0
def get_sulfur_content_by_weathering(oil_columns, field_indexes, weathering):
    sulfur_contents = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'sulfur_content_astm_d4294')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        kwargs = build_kwargs(prop_names, vals, weathering[idx])
        sulfur_contents.append(kwargs)

    return [
        percent_to_fraction(f['sulfur_content']) for f in sulfur_contents
        if f['sulfur_content'] is not None
    ]
Beispiel #14
0
def get_oil_viscosities_at_5c(oil_columns, field_indexes, weathering):
    viscosities = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'viscosity_at_0_5_c_mpa_s')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        dvis_kwargs = build_dvis_kwargs(prop_names, vals,
                                        'viscosity_at_5_c_mpa_s',
                                        weathering[idx], 273.15 + 5.0)

        viscosities.append(dvis_kwargs)

    return [DVis(**v) for v in viscosities if v['kg_ms'] not in (None, 0.0)]
Beispiel #15
0
def get_pour_points_by_weathering(oil_columns, field_indexes, weathering):
    pour_points = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'pour_point_c')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        pour_point_obj = build_pour_point_kwargs(prop_names, vals,
                                                 weathering[idx])
        pour_points.append(pour_point_obj)

    return [
        PourPoint(**p) for p in pour_points
        if p['min_temp_k'] is not None or p['max_temp_k'] is not None
    ]
def get_flash_points_by_weathering(oil_columns, field_indexes, weathering):
    flash_points = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'flash_point_c')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        flash_point_obj = build_flash_point_kwargs(prop_names, vals,
                                                   weathering[idx])
        flash_points.append(flash_point_obj)

    return [
        FlashPoint(**f) for f in flash_points
        if f['min_temp_k'] is not None or f['max_temp_k'] is not None
    ]
def get_evaporation_eqs_ests_1998(oil_columns, field_indexes, weathering):
    evaporation_eqs = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'evaporation_ests_1998_1')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        evaporation_kwargs = build_evaporation_kwargs(prop_names, vals,
                                                      weathering[idx],
                                                      '(A + BT) ln t',
                                                      'for_ev_a_bt_ln_t')
        evaporation_eqs.append(evaporation_kwargs)

    return [EvaporationEq(**eq) for eq in evaporation_eqs
            if eq['a'] is not None and eq['b'] is not None]
Beispiel #18
0
def get_oil_viscosities_at_5c(oil_columns, field_indexes, weathering):
    viscosities = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'viscosity_at_0_5_c_mpa_s')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        dvis_kwargs = build_dvis_kwargs(prop_names, vals,
                                        'viscosity_at_5_c_mpa_s',
                                        weathering[idx],
                                        273.15 + 5.0)

        viscosities.append(dvis_kwargs)

    return [DVis(**v) for v in viscosities
            if v['kg_ms'] not in (None, 0.0)]
Beispiel #19
0
def get_emulsion_age_7(oil_columns, field_indexes, weathering):
    emulsions = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'emulsion_at_15_degc_'
                                           'one_week_after_formation_'
                                           'ests_1998b')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        emulsion_kwargs = build_emulsion_kwargs(prop_names, vals,
                                                weathering[idx],
                                                273.15 + 15.0, 7.0)
        emulsions.append(emulsion_kwargs)

    return [Emulsion(**e) for e in emulsions
            if e['water_content_fraction'] is not None]
def get_evaporation_eqs_mass_loss2(oil_columns, field_indexes, weathering):
    evaporation_eqs = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'parameters_for_'
                                           'evaporation_equation_mass_loss')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        evaporation_kwargs = build_evaporation_kwargs(prop_names, vals,
                                                      weathering[idx],
                                                      'A + B ln (t + C)',
                                                      'for_ev_a_b_ln_t_c')
        evaporation_eqs.append(evaporation_kwargs)

    return [EvaporationEq(**eq) for eq in evaporation_eqs
            if eq['a'] is not None and eq['b'] is not None]
Beispiel #21
0
def get_emulsion_age_7(oil_columns, field_indexes, weathering):
    emulsions = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'emulsion_at_15_degc_'
                                           'one_week_after_formation_'
                                           'ests_1998b')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        emulsion_kwargs = build_emulsion_kwargs(prop_names, vals,
                                                weathering[idx],
                                                273.15 + 15.0, 7.0)
        emulsions.append(emulsion_kwargs)

    return [Emulsion(**e) for e in emulsions
            if e['water_content_fraction'] is not None]
Beispiel #22
0
def get_asphaltenes_fraction_by_weathering(oil_columns, field_indexes,
                                           weathering):
    asphaltenes_fractions = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'hydrocarbon_group_content')
    prop_names = list(props.keys())

    for idx, vals in enumerate(zip(*list(props.values()))):
        props_to_rename = {'asphaltene': 'asphaltenes_fraction'}
        kwargs = build_kwargs(prop_names, vals, weathering[idx],
                              props_to_rename=props_to_rename)
        asphaltenes_fractions.append(kwargs)

    return [percent_to_fraction(f['asphaltenes_fraction'])
            for f in asphaltenes_fractions
            if f['asphaltenes_fraction'] is not None]
Beispiel #23
0
def get_evaporation_eqs_ests_1998(oil_columns, field_indexes, weathering):
    evaporation_eqs = []

    props = get_oil_properties_by_category(oil_columns, field_indexes,
                                           'evaporation_ests_1998_1')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        evaporation_kwargs = build_evaporation_kwargs(prop_names, vals,
                                                      weathering[idx],
                                                      '(A + BT) ln t',
                                                      'for_ev_a_bt_ln_t')
        evaporation_eqs.append(evaporation_kwargs)

    return [
        EvaporationEq(**eq) for eq in evaporation_eqs
        if eq['a'] is not None and eq['b'] is not None
    ]
Beispiel #24
0
def get_evaporation_eqs_mass_loss2(oil_columns, field_indexes, weathering):
    evaporation_eqs = []

    props = get_oil_properties_by_category(
        oil_columns, field_indexes, 'parameters_for_'
        'evaporation_equation_mass_loss')
    prop_names = props.keys()

    for idx, vals in enumerate(zip(*props.values())):
        evaporation_kwargs = build_evaporation_kwargs(prop_names, vals,
                                                      weathering[idx],
                                                      'A + B ln (t + C)',
                                                      'for_ev_a_b_ln_t_c')
        evaporation_eqs.append(evaporation_kwargs)

    return [
        EvaporationEq(**eq) for eq in evaporation_eqs
        if eq['a'] is not None and eq['b'] is not None
    ]