gnome.weatherers.evaporation

model evaporation process

Module Contents

Classes

Evaporation

Base Weathering agent. This is almost exactly like the base Mover

BlobEvaporation

playing around with blob evaporation and time varying fay_area

class gnome.weatherers.evaporation.Evaporation(water=None, wind=None, **kwargs)

Bases: gnome.weatherers.Weatherer

Base Weathering agent. This is almost exactly like the base Mover in the way that it acts upon the model. It contains the same API as the mover as well. Not Serializable since it does is partial implementation

Parameters:
  • conditions – gnome.environment.Conditions object which contains things like water temperature

  • wind (Wind API, specifically must have get_value(time) method) – wind object for obtaining speed at specified time

_schema
_ref_as = 'evaporation'
_req_refs = ['water', 'wind']
prepare_for_model_run(sc)

add evaporated key to mass_balance for now also add ‘density’ key here Assumes all spills have the same type of oil

_mass_transport_coeff(points, model_time)

Is wind a function of only model_time? How about time_step? at present yes since wind only contains timeseries data

K = c * U ** 0.78 if U <= 10 m/s K = 0.06 * c * U ** 2 if U > 10 m/s

If K is expressed in m/sec, then Buchanan and Hurford set c = 0.0025 U is wind_speed 10m above the surface

Note

wind speed is at least 1 m/s, unless there is an ice aware wind.

Note

ice aware wind enforces minimum speed before applying coverage factor.

_set_evap_decay_constant(points, model_time, data, substance, time_step)
weather_elements(sc, time_step, model_time)

weather elements over time_step

  • sets ‘evaporation’ in sc.mass_balance

  • currently also sets ‘density’ in sc.mass_balance but may update this as we add more weatherers and perhaps density gets set elsewhere

Following diff eq models rate of change each pseudocomponent of oil:

dm(t)/dt = -(1 - fw) * A/B * m(t)

Over a time-step, A, B, C are assumed constant. m(t) is the component mass at beginning of timestep; m(t + Dt) is mass at end of timestep:

m(t + Dt) = m(t) * exp(-L * Dt)
L := (1 - fw) * A/B

Define properties for each pseudocomponent of oil and constants:

vp: vapor pressure
mw: molecular weight

The following quantities are defined for a given blob of oil. The thickness of the blob is same for all LEs regardless of how many LEs are used to model the blob:

area: area computed from fay spreading
m_i: mass of component 'i'
sum_m_mw: sum(m_i/mw_i) over all components

effect of wind - mass transport coefficient:

K: See _mass_transport_coeff()

Finally, Evaporation of component ‘i’ for blob of oil:

A = area * K * vp
B = gas_constant * water_temp * sum_m_mw
L becomes::

L = (1 - fw) * area * K * vp/(gas_constant * water_temp * sum_m_mw)

class gnome.weatherers.evaporation.BlobEvaporation(water=None, wind=None, **kwargs)

Bases: Evaporation

playing around with blob evaporation and time varying fay_area experimental code - not currently used by Model. Testing out the algorithm in ipython notebooks.

See documentation in source code:

gnome/documentation/evaporation/blob_evap.ipynb

Parameters:
  • conditions – gnome.environment.Conditions object which contains things like water temperature

  • wind (Wind API, specifically must have get_value(time) method) – wind object for obtaining speed at specified time

_set_evap_decay_constant(model_time, data, substance, time_step)

testing - for now assume only one spill and instantaneous spill