import numpy as np
[docs]
def drazkowska2016(
OmegaK, rho_dust, rho_gas, Sigma_dust, St,
p2g_crit=1., St_crit=0.01, zeta=0.01):
"""
Function calculates the dust source term due to planetesimal
formation of Darzkowska et al. (2016).
Parameters
----------
OmegaK : array-like, (Nr,)
Keplerian frequency
rho_dust : array-like, (Nr, Nm)
Midplane dust volume density
rho_gas : array-like, (Nr,)
Midplane gas volume density
Sigma_dust : array-like, (Nr, Nm)
Dust surface density
St : array-like, (Nr, Nm)
Stokes numbers
p2g_crit : float, optional, default: 1.
Critical midplane pebbles-to-gas ratio of particles above
St_crit above which planetesimal formation is triggered
St_crit : float, optional, default: 0.01
Critical Stokes number above which dust particles
contribute to trigger planetesimal formation
zeta : float, optional, default: 0.1
Planetesimal formation efficiency
Returns
-------
S : array-like, (Nr, Nm)
Dust source terms due to planetesimal formation
"""
mask = St >= St_crit
p2g_mid = np.where(mask, rho_dust, 0.).sum(-1)/rho_gas
trigger = np.where(p2g_mid >= p2g_crit, True, False)
Sigma_pebbles = np.where(mask, Sigma_dust, 0.)
S = np.where(trigger[:, None], -zeta*Sigma_pebbles*OmegaK[:, None], 0.)
S[0, :] = 0.
S[-1, :] = 0.
return S
[docs]
def miller2021(
OmegaK, rho_dust, rho_gas, Sigma_dust, St,
d2g_crit=1., n=0.03, zeta=0.1):
"""
Function calculates the dust source term due to planetesimal
formation of Miller et al. (2021).
Parameters
----------
OmegaK : array-like, (Nr,)
Keplerian frequency
rho_dust : array-like, (Nr, Nm)
Midplane dust volume density
rho_gas : array-like, (Nr,)
Midplane gas volume density
Sigma_dust : array-like, (Nr, Nm)
Dust surface density
St : array-like, (Nr, Nm)
Stokes numbers
d2g_crit : float, optional, default: 1.
Critical midplane dust-to-gas ratio above which
planetesimal formation is triggered
n : float, optional, default: 0.03
Smoothness parameter of dust-to-gas ratio transition
zeta : float, optional, default: 0.1
Planetesimal formation efficiency
Returns
-------
S : array-like, (Nr, Nm)
Dust source terms due to planetesimal formation
"""
d2g_mid = rho_dust.sum(-1)/rho_gas
P = 0.5*(1.+np.tanh((np.log10(d2g_mid)-np.log10(d2g_crit))/n))
S = -P[:, None]*zeta*Sigma_dust*St*OmegaK[:, None]
S[0, :] = 0.
S[-1, :] = 0.
return S
[docs]
def schoonenberg2018(
OmegaK, rho_dust, rho_gas, Sigma_dust, St,
d2g_crit=1., zeta=0.1):
"""
Function calculates the dust source term due to planetesimal
formation of Schoonenberg et al. (2018).
Parameters
----------
OmegaK : array-like, (Nr,)
Keplerian frequency
rho_dust : array-like, (Nr, Nm)
Midplane dust volume density
rho_gas : array-like, (Nr,)
Midplane gas volume density
Sigma_dust : array-like, (Nr, Nm)
Dust surface density
St : array-like, (Nr, Nm)
Stokes numbers
d2g_crit : float, optional, default: 1.
Critical midplane dust-to-gas ratio above which
planetesimal formation is triggered
zeta : float, optional, default: 0.1
Planetesimal formation efficiency
Returns
-------
S : array-like, (Nr, Nm)
Dust source terms due to planetesimal formation
"""
d2g_mid = rho_dust.sum(-1)/rho_gas
trigger = np.where(d2g_mid >= d2g_crit, True, False)
S = np.where(trigger[:, None], -zeta*Sigma_dust*St*OmegaK[:, None], 0.)
S[0, :] = 0.
S[-1, :] = 0.
return S