πŸ“š TL;DR guide[1]

πŸ’ͺ Model capabilities

type

currents

winds

waves

beaching

spreading

entrainment

evaporation

emulsification

dissolution

volatilization

sedimentation

biodegradation

drifter

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

❌

❌

❌

❌

❌

❌

❌

❌

sar

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

❌

❌

❌

❌

❌

❌

❌

❌

oil

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

❌

❌

❌

❌

hns

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

❌

βœ”οΈ

βœ”οΈ

βœ”οΈ

βœ”οΈ

πŸ“– Processes

Brief explanation of the main processes modeled by TESEO. As the majority of lagrangian models, TESEO use a simplified linear super-position technique to approximate particle motion. In this strategy the transport rate for a slick is represented by employing a vector sum of the transports induced by the mean flow, tides, wind, waves (wich is known as advection) and the transport due to turbulent dispersion.

\(x_i^{t+1} = x_0^{t} + (U_a + U_D)\cdot \Delta t\)

where \(u_a\) is the advection velocity and \(u_D\) is the turbulent diffusion velocity

\(U_a = C_c\cdot U_c + C_d\cdot U_w + C_{sd}\cdot U_{sd}\)

\(U_D = \sqrt{\frac{6D}{\Delta t}}\)

Weathering processes also are taking into account to evaluate the degradation and mass balance of the substances when an oil or hns release is defined. See the full catalog of processes with a brief explanation bellow:

πŸ”€ Currents

The velocity of the currents velocity is directly transfered to the particle \(U_c = C_c\cdot U_c\); Where \(u_c\) is the current velocity and \(C_c\) is a calibration coefficient, with value equal to 1.

πŸ’¨ Wind drag

The velocity of the particle due to the wind drag over the particle area outside of the waterbody is expressed as \(U_w = C_d\cdot u_w\); Where \(u_w\) is the wind velocities at 10m over the sea surface and \(C_d\) is the wind drag coefficient. This relation between the wind at 10m over the sea surface and the velocity of the particle due to this drag it is not direct related and different studies recommend a transfer rate between the 2.5% and 4.4% of the wind velocity and the deflection angles vary between 0ΒΊ and 25Β° to the right/left of the wind direction(northern/southern hemisphere).

\(C_d = \alpha + \beta \cdot \left| u_w \right|\) with \(\beta = 0\)

\(C_d = \alpha\)

Reference

\(\alpha\) coefficient

\(\beta\) coefficient

ASCE, 1996

0.025 - 0.044

0

Note deflection angles correction is not aplied in TESEO

🌊 Stokes drift

Wave effect on particles’ transport is calculated based on wave-induced Stokes drift, calculated as \(U_{sd} = C_{sd}\cdot u_{sd}\). Where \(u_{sd}\) is the net movement of the eulerian transport produced by a wave during a complet cycle, and it is calculated as \(u_{sd} = \frac{g\cdot H}{8C}\) and \(C\) is the wave celerity Dean and Dalrymple, 1991

Reference

\(C_w\) coefficient

Castanedo et al., 2006

0.005 - 0.015

☁️ Turbulent diffusion

The turbulent diffusion formulation is based on a random walk algorithm to evaluate the turbulent velocity. The turbulent velocity is part of the total velocity that moves the particles on the water and responds to the action of the eddy vorticity of the water in turbulent regimes, which is a chaotic motion.

Turbulent diffusion velocities are calculated using a Monte Carlo sampling in the range of velocities \([\vec{-u_D}, \vec{u_D}]\)

where \(U_D = \sqrt{\frac{6D}{\Delta t}}\)

Formulation

\(D_h\) horizontal coefficient

\(D_v\) vertical coefficient

ASCE, 1996

1-100 m2/s

0.01-1 m2/s

Moreover, a different implementation is availbale to use TESEO in riverine environments following Shen and Yapa (1988)

πŸ–οΈ Beaching

Process of evaluation of each particle’s location to consider if the particle is in the water or on the land. If the particle is on water is particle able to be moved in the following timestep (active particle); If the particle is on land it gets fixed to the land (inactive particle).

This process is subdivided in two main subprocesses: a) Evaluate if the particle is on water or land, based on domain grid or based on coastline polygons, and b) when particle is on land, move the particle to the closest grid or coastline point.

Algorithm

Domain data needed

Description

grid

grid

Uses euclidean distance to grid points to check location. If land, it will move the particle to the closest land point

coastline_low

grid and coastline

Same as grid but moves the particle to the closest coastal point

coastline_high

grid and coastline

Uses in-polygon algorithm to check water or land location, and moves it to the closest coastal point

πŸ«— Spreading

One of the main oil transportation processes is the initial spreading. For small oil spills, a complete spreading process occurs during the first hour after the spill. It occurs due to viscosity, gravity, buoyancy and surface tension forces. The spreading process also depends on wind drift, surface current and other mixing processes like diffusion. These mechanisms can transport oil long distances (Pilzis, 2017).

Activating the spreading process in the simulations the model can calculate the initial area and thickness of a puntual release based on the substance properties and the mass or volume released, this is the cause why this process is always activated by default in oil and hns simulation. In the case of the Oil implementation the user should provide a maximum duration and a minimum thickness to let the model stop the spreading process when one of this conditions will be reached.

Release type

Formulation

Maximum duration

Minimum thickness

OIL

adios2

0-48h

depending on the substance

OIL

lehr

0-48h

depending on the substance

HNS

mohid_hns

None

depending on the substance

πŸ’§ Entrainment

Due to wind and wave effects it is common that part of the substance will be disperssed into the water column creating droplets of different sizes. This change in the mass balance from surface to the water colunm can be also addresed based on Delvigne & Hulsen, 1994

♨️ Evaporation

Oil evaporation is calculated based on an analytical model proposed by Stiver and Mackay (1980). In their formulation, the rate of evaporation is related to vapor pressure, spill area, a mass transference coefficient that depends on wind speed, environmental temperature, and oil type.

\(\Delta F = exp[6.3-\frac{10.3}{T}(T_0+T_G\cdot F)]*(\frac{k\cdot A\cdot \Delta t}{V_0})\)

where \(F\) is the evaporated fraction, \(k\) is the coefficient of mass transfer, \(A\) is the oil slick surface, \(V_o\) is the oil spiled volumem, \(T\) is the environmental temperature, and \(T_0\) and \(T_G\) are distilation constants.

(!) Check implementation in TESEO

HNS evaporation is based on Kawamura and Mackay (1985) and Fernades (2014). According to these authors, evaporation is estimated following the equaction:

\(E = A\cdot K_m + \frac{M_w\cdot P_w}{Rt}\)

where \(E\) is the evaporation rate (\(kg/s\)), \(A\) is the area of the evaporating puddle (\(m^2\)), \(K_m\) is the mass transfer coefficient (\(m/s\)), \(M_w\) is the molecular weight of the chemical (\(kg/mol\)), \(P_v\) is the vapour pressure (\(Pa\)), R is the gas constant (\(8314J/(kmol K)\)), and \(T\) is the air temperature (\(ΒΊK\)).

The mass transfer coefficient (\(K_m\)) can be expressed as Mackay and Matsugu (1973):

\(K_m = 0.0292{U}^{7/9}\cdot {Z}^{-1/9}\cdot {S_c}^{-2/3}\)

where \(U\) is the wind speed at a height of 10m (\(m/s\)), \(Z\) is the pool diameter in the along-wind direction (\(m\)), and \(S_c\) is the laminar Schmidt number for the selected chemical.

\(S_c = \frac{\nu}{D_m}\)

where \(\nu\) is the kinematic viscosity of the air (\(1.5\cdot {10}^{-5} \) \(m^2/s\)) and \(D_m\) is the molecular diffusivity of the selected chemical in the air (\(m^2/s\)) following Graham’s Law aproximation:

\(D_m = D_{h_2o}{(\frac{M_{w}^{h_2o}}{M_{w}^{chem}})}^{1/2}\)

where \(D_{h_2o}\) is the molecular diffusivity of water (\(2.4\cdot {10}^{-5}\) \({m}^{2}/s\) at \(8ΒΊC\)), \({M}_w^{h_2o}\) is the molecular weight of water (\(18\) \(kg/kmol\)) and \(M_{w}^{chem}\) is the molecular weitght of the chemical.

πŸ’₯ Volatilization

A correction for volatilization is included based on Brighton (1985), (1990), and Reynolds (1992). Correction coefficient is defined as:

\(C = -\frac{P_a}{P_\nu}\cdot ln(1-\frac{P_a}{P_\nu})\)

where P_a is the atmospheric pressure (\(101.325\) \(Pa\) at sea level) and \(P_\nu\) is the vapour pressure of the solute (\(Pa\)). For chemicals that are not very volatile \(C \approx 1\). It will increase as the vapour pressure of the chemical increases.

\(E_c = C * E\)

\(E_{volatilization} = E_c - E\)

🧽 Emulsification

This process is simulated by means of a first-order rate law proposed by Mackay (1980). In this method, the rate of water incorporation is related to wind speed, maximum water-in-oil content, and a constant rate that depends on the type of oil.

\(\frac{dY}{dt} = -k(W_{10}+1)^2(1-\frac{Y}{Y_f})\)

where \(Y\) is the water content, \(Y_f\) is the maximum water-in-oil content, \(W_{10}\) is the wind velocity at 10m over the sea surface and \(k\) is a constant rate that depends on the oil type.

βš—οΈ Dissolution

Dissolution is calculated according to Mackay and Leinoen (1977) and Fernandes (2014). The dissolved mass following the authors reads as follows:

\(M_d = K_d\cdot A_s (S\cdot10^{-3})\cdot \Delta t\)

Where \(M_d\) is the disolved mass (\(kg\)), \(t\) is the time-step (\(s\)), \(K_d\) is the dissolution mass transfer constant (\(m/s\)), \(S\) is the solubility in water (\(mg/L\)), and \(A_s\) is the surface area (\(m^{2}\)). Considering the slick surface as a flat plate:

\(K_d = Sh\cdot D_i \cdot 10^{-4}\)

where \(Sh\) is the Sherwood Number, \(D_i\) is the diffusivity (\(cm^{2}/s\)), and \(L\) is the characteristic length (\(m\)). The diffusivity (\(cm^{2}/s\)) is computed based on Hayduk and Laudie (1974):

\(D_i = \frac{13.36 \cdot 10^{.5}}{\mu ^{1.14} \cdot {V_b}^{0.589}}\)

where \(\mu\) is the water dynamic viscosity (\(cP\)) and \(V_b\) is the Le Bas molar volume (\(cm^{3}/mol\))

⬇️ Sedimentation

🦠 Biodegradation

πŸ”₯ Quick start

The 2 main processes that any user needs:

1. Make a simulation

This β€œRequest” to the library is made by instance the class SimulationRequest and for this class definition other main sub-clasessand fields have to be passed:

Required field

Value

Comment

domain

Domain

domain object

releases

list(ReleasePoints)

each release point is defined by DrifterReleasePoint, SarReleasePoint, OilReleasePoint, or HnsReleasePoint

duration

datetime.timedelta

duration of the simulation

forcings

ForcingsRequest

Object in wich the dataset and how to obtain them (online or local) are defined

For extra configurations see the complete class at API reference For a simple example, see hands-on section.

2. Make a domain

PyTESEO is developed based on Pydantic models, which allows users to instance clasess passing an unpacked dictionary to the parent class like MyClass(**my_dict). Pydantic takes care to check that all the fields are right and parse all the necessary standard fileds, like datetimes and timedeltas from standard notations (ISO_8601). Also, it takes into account nested instances of child classes so it is possible to define all you need in the same dictionary.

Let’s see an example to create a domain:

We are going to use the class DomainRequest

from pyteseo.models.domain_request import DomainRequest

domain_definition = {
        "name": "ibiza",
        "bbox": (0.9, 38.5, 1.9, 39.3),
        "elevation": {
            "service": "opendap",
            "provider": "ihcantabria",
            "dataset": "gebco_2023_1min",
        },
        "coastline": {
            "service": "wfs",
            "provider": "ihcantabria",
            "dataset": "osm_land_polygons",
        },
        "n_polygons": None,
    }

# Instance the class with the desired definition
domain_request = DomainRequest(**domain_definition)

# Execute the process to generate the domain
domain_request.process_request()

The easiest way to start is checking the examples in hands-on section but mainly, you need to create a dictionary following the next steps:

  1. Set up a domain by means of passing the folder location.

  2. Set up some general configurations like duration.

  3. Set up the release points you desire (take into account that all have to be of the same type).

  4. Set up the forcings datasets you want to drive the simulation.

if you need to check all options related to any model you can find them at the API Reference.

SimulationRequest DomainRequest