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)]
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) ]
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]
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]
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]
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]
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]
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 ]
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)]
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]
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)]
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]
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]
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]
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 ]
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 ]